2013-08-02 15 views
5

dire che ho aggiunto molte caselle di testo. Come eseguire iterazioni o looping attraverso tutte le caselle di testo e fare qualche controllo. Controlla se il contenuto di ogni casella di testo è un numero.Come ripetere tutte le caselle di testo sulla pagina corrente

Di seguito è riportato il codice per winForm, come eseguire in WinRT?

foreach (Control item in GroupBox1.Controls) 
{ 

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

Grazie.

+0

È considerato educato contrassegnare la risposta corretta. –

risposta

1

Si può fare così. Ogni pagina avrà un contenitore di UIElements, quindi sto usando Grid. Puoi anche fare lo stesso con StackPanel anche. Sto iterando attraverso i suoi figli e controllando se è Textbox o no.

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

Grazie. Ma se ho Contenitori come: controlli griglia contengono 3 controlli Stack e ogni controllo dello stack contiene alcune caselle di testo. Come iterare questo tipo di struttura? Grazie – MilkBottle

+0

Dammi la tua struttura del contenitore, pubblicherò una soluzione per questo. – Xyroid

+0

No, questo non lo farà. Questo otterrà solo i figli di un singolo contenitore, è necessario renderlo ricorsivo. Risponderò con la soluzione in modo da poter vedere cosa intendo. –

3

questo è come fare quello che vuoi.

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

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

Buona fortuna!

1

// in asp.net C#, se non avete masterpage

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

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

/se avete pagina master poi/

foreach (voce di controllo a Page.Form.FindControl ("ContentPlaceHolder1 ") .Controls) { if (item is TextBox) { ((TextBox) item) .Text = string.Empty; } }

+0

se avete masterpage di utilizzare questo: Se avete pagina master poi foreach (. Elemento di controllo in Page.Form.FindControl ("ContentPlaceHolder1") Controlli) { se (voce è TextBox) { ((TextBox) item) .Text = string.Empty; } } –

Problemi correlati