如何迭代当前页面上的所有文本框

时间:2013-08-02 04:48:04

标签: c# windows-8 windows-store-apps winrt-xaml

说我添加了很多文本框。如何迭代或循环遍历所有文本框并进行一些检查。检查每个文本框的内容是否为数字。

以下是winForm的代码,如何在WinRT中进行操作?

foreach (Control item in GroupBox1.Controls)
{

    if (item.GetType() == typeof(TextBox))
    {
        if (string.IsNullOrEmpty( ((TextBox)item).Text))
        {
            //Empty text in this box
        }
    }
}

感谢。

3 个答案:

答案 0 :(得分:3)

这就是你想做的事情。

public MainPage()
{
    this.InitializeComponent();
    Loaded += MainPage_Loaded;
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    foreach (var textBox in AllTextBoxes(this))
    {
        textBox.Text = "Hello world";
    }
}

List<TextBox> AllTextBoxes(DependencyObject parent)
{
    var list = new List<TextBox>();
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
    {
        var child = VisualTreeHelper.GetChild(parent, i);
        if (child is TextBox)
            list.Add(child as TextBox);
        list.AddRange(AllTextBoxes(child));
    }
    return list;
}

参考:http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

祝你好运!

答案 1 :(得分:1)

你可以这样做。每个页面都有一个UIElements的容器,因此我使用Grid。您也可以对StackPanel执行相同的操作。我正在遍历其子项并检查它是否为Textbox

XAML

<Grid x:Name="rootGrid" Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <TextBox Height="51" Margin="210,103,0,0" Text="TextBox" Width="135"/>
    <TextBox Height="51" Margin="459,149,0,0" Text="TextBox" Width="135"/>
    <TextBox Height="51" Margin="277,279,0,0" Text="TextBox" Width="135"/>
    <TextBox Height="51" Margin="580,279,0,0" Text="TextBox" Width="135"/>
    <TextBlock Height="63" Margin="227,494,0,0" Text="TextBlock" Width="142"/>
    <TextBlock Height="63" Margin="479,469,0,0" Text="TextBlock" Width="142"/>
    <TextBlock Height="63" Margin="573,406,0,0" Text="TextBlock" Width="142"/>
    <TextBlock Height="63" Margin="143,352,0,0" Text="TextBlock" Width="142"/>
    <CheckBox Content="CheckBox" Height="81" Margin="1064,203,0,0" Width="130"/>
    <CheckBox Content="CheckBox" Height="81" Margin="713,119,0,0" Width="130"/>
    <CheckBox Content="CheckBox" Height="81" Margin="831,352,0,0" Width="130"/>
</Grid>

C#

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    foreach (var child in rootGrid.Children)
    {
        if (child is TextBox)
        {
            System.Diagnostics.Debug.WriteLine(((TextBox)child).Text);
            if (string.IsNullOrEmpty(((TextBox)child).Text))
            {
                //Empty text in this box
            }
        }
    }
}

答案 2 :(得分:1)

//在asp.net c#中如果你没有母版页

    foreach (Control ctrl in Page.Controls)
    {
        if (ctrl is TextBox)
        {

            ((TextBox)ctrl).Text = string.Empty;
        }
    }

/ 如果您有母版页 /

foreach(Page.Form.FindControl中的控制项(&#34; ContentPlaceHolder1&#34;)。控件)         {             if(item是TextBox)             {                 ((TextBox)item).Text = string.Empty;             }         }