2011-01-18 3 views
4

Я хочу знать, возможно ли это в C# winform.Создание элементов управления динамически

создайте элемент управления, когда нажата кнопка и поместите его в заданное место.

Я думаю, что это возможно, как этот

private TextBox txtBox = new TextBox(); 
private Button btnAdd = new Button(); 
private ListBox lstBox = new ListBox(); 
private CheckBox chkBox = new CheckBox(); 
private Label lblCount = new Label(); 

но проблема заключается, когда-либо кнопка нажата те же органы управления именами created.How, чтобы избежать этого

Что-да ....... Я написал и не стал исключением, которого я ожидал, потому что элемент управления уже содержит btnAdd, а не столько кнопки создают столько, сколько вы хотите. Доступ к ним будет проблемой, но он будет решен методом @drachenstern правильно?

private void button1_Click_1(object sender, EventArgs e) 
     { 
      Button btnAdd = new Button(); 

      btnAdd.BackColor = Color.Gray; 
      btnAdd.Text = "Add"; 
      btnAdd.Location = new System.Drawing.Point(90, 25+i); 
      btnAdd.Size = new System.Drawing.Size(50, 25); 
      this.Controls.Add(btnAdd); 
      i = i + 10; 
     } 

ответ

3

Вы можете попробовать решение, которое я разместил here. Он будет динамически создавать 5 кнопок в конструкторе. Просто переместите код на событие нажатия кнопки, и он должен динамически добавлять кнопки и регистрироваться с событиями Click.

2

Похоже, что вы ищете List<TextBox>.

+0

ОК, а затем мы можем рассматривать его как реальный текстовый ящик, как все его свойства, события и т. Д. –

+0

idk, он никогда не устанавливает свойство '.Name' для чего-то уникального ... – jcolebrand

+0

@Afnan: Это _is_ настоящий текстовый ящик. – SLaks

3
int currentNamingNumber = 0; 

txtBox.Name = "txtBox" + currentNamingNumber++; 

Промыть, повторить.

Дает каждому элементу уникальное числовое имя, позволяет узнать, сколько элементов было создано (обратите внимание, что вы не хотите уменьшать, чтобы отслеживать все созданные объекты, потому что тогда вы можете создать два элемента с тем же именем).

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

Смежные вопросы