2013-08-02 11 views
5

powiedzieć, że dodałem wiele pól tekstowych. Jak iterować lub przechodzić przez wszystkie pola tekstowe i sprawdzać. Sprawdź, czy zawartość każdego pola tekstowego jest liczbą.Jak iterować wszystkie pola tekstowe na bieżącej stronie

Poniżej znajduje się kod dla winForm, jak to zrobić w WinRT?

foreach (Control item in GroupBox1.Controls) 
{ 

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

Dzięki.

+0

Uważa się, że uprzejme jest oznaczenie poprawnej odpowiedzi. –

Odpowiedz

1

Możesz zrobić tak. Każda strona będzie zawierała kontener UIElements, więc używam Grid. Możesz także zrobić to samo z StackPanel również. Przejmuję przez jego dzieci i sprawdzam, czy to jest Textbox czy nie.

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

Dzięki. Ale jeśli mam kontenery takie jak: Kontrolki siatki zawierają 3 kontrolki stosu, a każda kontrolka stosu zawiera kilka pól tekstowych. Jak iterować tego rodzaju strukturę? Dzięki – MilkBottle

+0

Podaj mi swoją konstrukcję kontenera. Napiszę do tego rozwiązanie. – Xyroid

+0

Nie, to nie zrobi tego. To dostanie dzieci tylko z jednego kontenera, musisz uczynić go rekursywnym. Odpowiem z rozwiązaniem, abyś mógł zobaczyć, co mam na myśli. –

3

W ten sposób można zrobić to, co chcesz.

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

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

Powodzenia!

1

// w asp.net C# jeśli nie Masterpage

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

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

/jeśli masz stronę wzorcową następnie/

foreach (element sterowania w Page.Form.FindControl ("ContentPlaceHolder1 ") .Controls) { if (pozycja TextBox) { ((TextBox) pozycja) .Text = string.Empty; } }

+0

jeśli masz masterpage niż korzystać z tego jeden: jeśli masz stronę wzorcową następnie foreach (. Poz sterowania w Page.Form.FindControl ("ContentPlaceHolder1") kontroluje) { if (pozycja jest TextBox) { ((TextBox) item) .Text = string.Empty; } } –

Powiązane problemy