2013-08-02 28 views
5

nói rằng tôi đã thêm nhiều hộp văn bản. Làm thế nào để lặp hoặc lặp qua tất cả các hộp văn bản và làm một số kiểm tra. Kiểm tra xem nội dung của mỗi hộp văn bản có phải là một số hay không.Cách lặp lại tất cả các hộp văn bản trên trang hiện tại

Dưới đây là mã cho winForm, cách thực hiện trong WinRT?

foreach (Control item in GroupBox1.Controls) 
{ 

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

Cảm ơn.

+0

Được coi là lịch sự để đánh dấu câu trả lời đúng. –

Trả lời

1

Bạn có thể làm như thế này. Mỗi trang sẽ có một vùng chứa là UIElements, vì vậy tôi đang sử dụng Grid. Bạn cũng có thể làm tương tự với StackPanel. Tôi đang lặp lại thông qua các con của nó và kiểm tra xem nó là Textbox hay không.

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

Cảm ơn. Nhưng nếu tôi có Containers như: Grid Controls chứa 3 Stack điều khiển và mỗi ngăn xếp kiểm soát có chứa một vài hộp văn bản. Làm thế nào để lặp lại loại cấu trúc này? Cảm ơn – MilkBottle

+0

Hãy cho tôi cấu trúc vùng chứa của bạn, tôi sẽ đăng giải pháp cho điều đó. – Xyroid

+0

Không, điều này sẽ không thực hiện. Điều này sẽ chỉ nhận được trẻ em của một container duy nhất, bạn cần phải làm cho nó đệ quy. Tôi sẽ trả lời với giải pháp để bạn có thể hiểu ý tôi. –

3

Đây là cách bạn làm những gì bạn muốn.

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

tham khảo: http://blog.jerrynixon.com/2012/09/how-to-access-named-control-inside-xaml.html

Best of luck!

1

// trong asp.net C# nếu bạn chưa masterpage

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

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

/nếu bạn có trang chủ sau đó/

foreach (Control mục trong Page.Form.FindControl ("ContentPlaceHolder1 ") .Control) { nếu (mục là Hộp văn bản) { ((mục Hộp văn bản)) .Text = string.Empty; } }

+0

nếu bạn có masterpage vì sử dụng cái này: nếu bạn có trang chủ sau đó foreach (. Kiểm soát mục trong Page.Form.FindControl ("ContentPlaceHolder1") Controls) { if (mục là TextBox) { ((TextBox) mục) .Text = string.Empty; } } –

Các vấn đề liên quan