#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 .