2015-04-28 3 views
0

Я динамически генерирую некоторые текстовые поля и помещаю их в холст.Получить текст из нескольких динамических генераторов Текстовое поле в WPF

 private void create_textbox(int number) 
     { 
     for(int i = 1; i < number; i++) 
      { 
      TextBox MyBox = new TextBox(); 
      darsteller_feld.Name = Convert.ToString("MyBox" + number); 
      MyBox.Height = 25; 
      MyBox.Width = 250; 
      MyBox.Text = "New Box" ; 
      MyBox_canvas.Children.Add(MyBox); 
      } 
     } 

Так я думал, что я мог рТ все тексты в строку [], как это: "? Unknown_Textbox_Name"

for(int i = 0; i < number; i++) 
    { 
    ARR[i] = ?Unknown_Textbox_Name?.Text; 
    } 

Как я могу заменить Часть?

ответ

2

Либо вы сохраняете все свои текстовые поля в списке при их создании, и просто добавляете их в свой массив.

Или, если вы хотите что-то более общего

U нужно найти весь childreen внутри холста, используя этот метод.

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
{ 
    if (depObj != null) 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
     { 
      DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
      if (child != null && child is T) 
      { 
       yield return (T)child; 
      } 

      foreach (T childOfChild in FindVisualChildren<T>(child)) 
      { 
       yield return childOfChild; 
      } 
     } 
    } 
} 

Затем перечислить через элементы управления, как так

foreach (TextBox tb in FindVisualChildren<TextBox>(MyBox_canvas)) 
{ 
    ARR.Add(tb.Text); 
} 
0

Либо использовать @Moez Rebai решение, или, если ваш TextBoxes являются прямыми потомками вашей Canvas:

var textboxes= MyBox_canvas.Children.OfType<TextBox>(); 

Кроме того, вы можете дать каждому TextBox nema, чтобы разделить их позже:

MyBox.Name = "MyTextBox"+i; 
Смежные вопросы