从WPF中的多个动态生成文本框中获取文本

时间:2015-04-28 10:09:59

标签: c# 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);
            }
        }

所以我认为我可以将所有文本放入字符串[]中,如下所示:

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

如何更换“?Unknown_Textbox_Name?”一部分?

2 个答案:

答案 0 :(得分:2)

您可以在创建文档框时将其保存在列表中,只需将它们添加到数组中即可。

或者如果你想要更通用的东西

你需要使用该方法在画布中找到所有的子画面。

CakeLog::config('custom_directory', array(
  'engine' => 'FileLog',
  'path' => 'webroot/my-logs/'
));

然后你按照这样的控件进行枚举

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

答案 1 :(得分:0)

使用 @Moez Rebai 解决方案,或者,如果您的TextBoxes是您Canvas的直接子女:

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

此外,您可能希望为每个TextBox提供一个nema,以便以后区分它们:

MyBox.Name = "MyTextBox"+i;