Обращение к динамически созданному элементу управления - PullRequest
1 голос
/ 28 сентября 2011

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

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

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 выдаст очевидную ошибку, что элемент управления не существует (потому что он не существует).

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

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

Эван

Ответы [ 2 ]

3 голосов
/ 28 сентября 2011

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

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";
    }
0 голосов
/ 28 сентября 2011

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

...