Создавайте элементы управления динамически - PullRequest
5 голосов
/ 18 января 2011

Я хочу знать, возможно ли это в 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();

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

Что да ........ я написал и не исключение, я ожидал этого, потому что элемент управления уже содержит 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 ]

3 голосов
/ 18 января 2011
int currentNamingNumber = 0;

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

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

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

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

3 голосов
/ 18 января 2011

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

1 голос
/ 18 января 2011

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

...