添加文本框&按钮编程 - >按钮单击事件,没有文本框的内容

时间:2011-09-14 17:09:02

标签: wpf entity-framework event-handling

我对此很陌生,到目前为止我还没有找到解决我问题的任何解决方案。

我想通过以编程方式添加控件来使用控件,这些控件正常工作,内容显示在窗口中,但是一旦我想通过按钮保存内容,事件处理程序就不会获取传递给它的变量。

我有以下情况,我不知道我错过了什么。 (WPF4,EF,VS2010)

在XAML中,我有一个网格,我想添加例如。一个文本框和一个来自代码的按钮,如

<Grid  Name="Grid1">
    <Grid.RowDefinitions>
        <RowDefinition Height="100"></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="75*"></ColumnDefinition>
        <ColumnDefinition Width="25*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <TextBox Grid.Row="2"  Name="textBox1" />
</Grid >

在代码隐藏中:

private void CheckMatching ()
{
    TextBox textBox2 = new TextBox();
    textBox2.Text = "textbox to fill";
    textBox2.Name = "textBox2";

    Grid1.Children.Add(textBox2);

    Button SaveButton = new Button();
    SaveButton.Name = "Save";
    SaveButton.Content = "Save";

    SaveButton.Click += new RoutedEventHandler(SaveButton_Click);
    Grid1.Children.Add(SaveButton);
}

private void SaveButton_Click ( object sender, RoutedEventArgs e )
{
    // works fine 
    string ShowContent1 = textBox1.Text;

    // It doesn't show up in intellisense, so I cant use it yet
    string ShowContent2 = textBox2.Text;
}

我可以访问XAML中的文本框内容或XAML中设置的所有内容,但是我没有获得我在代码隐藏中设置的任何内容。内容本身显示在窗口中。

我已经尝试了不同的方法。到目前为止没有任何工作。

1 个答案:

答案 0 :(得分:0)

这个问题不是WPF问题,而是面向对象计算机编程的基本问题。

如何期望textBox2方法中本地进行delcared和创建的对象(CheckMatching)可以在SaveButton_Click等其他方法中使用?

为此,您可以将其作为课程级别。

 private TextBox textBox2;

 private void CheckMatching ()
 {
     this.textBox2 = new TextBox();
     this.textBox2.Text = "textbox to fill";
     this.textBox2.Name = "textBox2";

     Grid1.Children.Add(this.textBox2);
     .....
 }

 private void SaveButton_Click ( object sender, RoutedEventArgs e )
 {
       string ShowContent1 = textBox1.Text; // works fine
       string ShowContent2 = this.textBox2.Text; // should work too
 } 

然后你也可以用WPF方式做....

 private void SaveButton_Click ( object sender, RoutedEventArgs e )
 {
       string ShowContent1 = textBox1.Text; // works fine
       string ShowContent2 = ((TextBox)Grid1.Children[1]).Text; // should work too
 }