Добавление текстового поля и кнопки программно -> событие нажатия кнопки без содержимого для текстового поля - PullRequest
0 голосов
/ 14 сентября 2011

Я довольно новичок в этом, и до сих пор я не нашел в сети ни одного решения, которое бы решало мою проблему.

Я хотел бы использовать элементы управления, добавляя их программно, что работает, и содержимое отображается в окне, но, как только я хочу сохранить содержимое с помощью кнопки, обработчик событий не передает переменные, переданные ему.

У меня следующая ситуация, когда я не знаю, что мне не хватает. (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 голосов
/ 15 сентября 2011

Этот вопрос не является проблемой 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
 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...