0

在我的应用程序中,我在运行时创建了一个文本框,这是代码

TextBox bt = new TextBox();
bt.Name = "population_textbox";
bt.Height = 20;
bt.SetValue(Grid.ColumnProperty, 1);
bt.SetValue(Grid.RowProperty, 0);
temp_grid.Children.Add(bt);

那么,如何在用户输入内容并输入后获取此文本框的文本。不知道怎么弄,我试试

var tb = (FrameworkElement)this.FindName("population_textbox") as TextBox;
Console.Write(tb.Text);

这是错误警报:

Exception has been thrown by the target of an invocation.
4

3 回答 3

2

我为你写一个简单的例子:

 TextBox bt = new TextBox();
            bt.Name = "population_textbox";
            bt.Text = "some";
            bt.Height = 20;
            main_Grid.Children.Add(bt);
            foreach (TextBox txt in main_Grid.Children)
            {
                if (txt is TextBox)
                {
                    if ((txt as TextBox).Name == "population_textbox")
                    {
                        MessageBox.Show((txt as TextBox).Text);
                    }
                }
            }
于 2013-04-08T09:19:10.157 回答
1

使用以下代码:

 this.RegisterName("bt", textBox);

也试试:

var tb = (FrameworkElement)this.FindName("population_textbox");

或直接写:

TextBox bt = new TextBox();
bt.Name = "population_textbox";
bt.Height = 20;
bt.SetValue(Grid.ColumnProperty, 1);
bt.SetValue(Grid.RowProperty, 0);
temp_grid.Children.Add(bt);
Console.Write(bt.Text);

[没有在 tb var 中使用它]。

这用于从其值被分配运行时的文本框中获取文本。

于 2013-04-08T09:19:35.850 回答
1

您应该声明您的控件,然后调用使控件可访问的 RegisterName 方法,然后您可以从窗口范围内的任何位置引用控件名称:

        TextBox bt = new TextBox();
        bt.Name = "population_textbox";
        bt.Height = 20;
        bt.SetValue(Grid.ColumnProperty, 1);
        bt.SetValue(Grid.RowProperty, 0);
        temp_grid.Children.Add(bt);
        this.RegisterName(bt.Name, bt);


        var tb = this.FindName("population_textbox") as TextBox;
        Console.Write(tb.Text);
于 2013-04-08T11:53:46.037 回答