以编程方式添加文本框和按钮 - > 没有文本框内容的按钮单击事件



我对这个很陌生,到目前为止我还没有找到任何可以解决我的问题的在线解决方案。

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

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

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

<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中设置的其他所有内容,但我无法获得我在代码隐藏中设置的其他任何内容。内容本身显示在窗口中。

我已经尝试了不同的方法。

这个问题不是WPF的问题,而是关于面向对象计算机编程的一些非常基本的问题。

你怎么能期望一个对象(textBox2)在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
 } 

相关内容

  • 没有找到相关文章

最新更新