2013-08-02 8 views
5

sagen, ich habe viele Textfelder hinzugefügt. Wie man iteriert oder durch alle Textfelder schleift und etwas überprüft. Überprüfen Sie, ob der Inhalt jeder Textbox eine Nummer ist.Wie alle Textfelder auf der aktuellen Seite iterieren

Unten ist der Code für WinForm, wie in WinRT zu tun?

foreach (Control item in GroupBox1.Controls) 
{ 

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

Danke.

+0

Es gilt als höflich, die richtige Antwort zu markieren. –

Antwort

1

Sie können so tun. Jede Seite hat einen Container von UIElements, also verwende ich Grid. Sie können auch dasselbe mit StackPanel auch tun. Ich wiederhole die Kinder und überprüfe, ob es Textbox ist oder nicht.

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 
      } 
     } 
    } 
} 
+0

Danke. Aber wenn ich Container habe wie: Grid Controls enthalten 3 Stack Controls und jedes Stack Control enthält ein paar Textboxen. Wie man diese Art von Struktur iteriert? Danke – MilkBottle

+0

Gib mir deine Containerstruktur, ich werde dafür eine Lösung posten. – Xyroid

+0

Nein, das wird es nicht tun. Dadurch werden nur die untergeordneten Elemente eines einzelnen Containers abgerufen. Sie müssen es rekursiv machen. Ich werde mit der Lösung antworten, damit Sie sehen können, was ich meine. –

3

Dies ist, wie Sie das tun, was Sie wollen.

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; 
} 

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

Best of luck!

1

// in asp.net C#, wenn Sie nicht

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

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

/MasterpaDE haben, wenn Sie Master-Seite haben, dann/

foreach (Control Artikel in Page.Form.FindControl ("ContentPlaceHolder1 ") .Controls) { if (Element ist TextBox) { ((TextBox) -Element) .Text = string.Empty; } }

+0

Dank, wenn Sie als Masterpage verwenden diese: wenn Sie Master-Seite dann foreach (. Steuer Artikel in Page.Form.FindControl ("ContentPlaceHolder1") Controls) { if (Artikel ist TextBox) { ((TextBox) Element) .Text = string.Empty; } } –