Обращение к динамически созданному элементу управления

#c# #winforms #dynamic

#c# #winforms #динамический

Вопрос:

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

Предположим, я создал кнопку (с именем «Button1») во время разработки. В событии щелчка Button1, ( Button1_Click ), я хотел бы написать слово «Привет» элементу управления текстовым полем, который не будет создан до тех пор, пока приложение не будет выполнено. Некоторый код ниже:

C # Код:

 // Create the textBox control
TextBox new_textBox = null;
int x = 10;
int y = 10;
int xWidth = 300;
int yHeight = 200;

new_textBox = new TextBox();
                new_textBox.Text = controlText;
                new_textBox.Name = "textBox"   controlName;
                new_textBox.Size = new System.Drawing.Size(xWidth - 10, yHeight - 10);
                new_textBox.Location = new Point(x, y);
                new_textBox.BringToFront();
                new_textBox.Multiline = true;
                new_textBox.BorderStyle = BorderStyle.None;

// Add the textBox control to the form
this.Controls.Add(new_textBox);
  

Проблема:

Из Button1_Click события я не могу связаться с элементом управления, который еще даже не был создан. Таким образом, Visual Studio выдаст очевидную ошибку о том, что элемент управления не существует (потому что его нет).

Итак, есть ли какой-нибудь способ динамического вызова элемента управления, а точнее, элемента управления текстовым полем?

Спасибо за любую помощь по этому вопросу,

Эван

Комментарии:

1. Компилятор не распознал мой элемент управления — ответ Джима сработал.

Ответ №1:

Объявите new_textBox область видимости класса at. Затем компилятор может получить к нему доступ. Например:

 class MyForm
{
    TextBox new_textBox;

    void InitializeTextBox()
    {
        new_textBox = new TextBox();
        // initialization code here
        // Add it to the form
        this.Controls.Add(new_textBox);
    }

    void Button1_Click(...)
    {
        new_textBox.Text = "clicked";
    }
  

Комментарии:

1. Абсолютно блестяще! Спасибо, мой друг.

2. Кроме того, просто чтобы добавить примечание, вы можете использовать find control в его родительском элементе и изменить их свойства.

Ответ №2:

Вы можете сделать new_textBox класс членом (членом формы). Вы можете снова присвоить ему значение и добавить к элементам управления forms позже динамически. Однако было бы неплохо проверить, является ли значение null в событии ButtonClick .