Создать и добавить новый элемент управления динамически в форму - PullRequest
0 голосов
/ 09 июля 2011

Я создал ярлык, используя следующий код:

public static System.Windows.Forms.PictureBox pc = new PictureBox(); 

public static System.Windows.Forms.Label la = new Label();

private void label2_Click(object sender, EventArgs e)
{
    label2.Visible = false;
    pictureBox2.Hide();
    Controls.Add(la);
    la.Location = new Point(78, 191);
    la.Size = new Size(72, 77);
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
}

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

Ответы [ 2 ]

1 голос
/ 09 июля 2011
 public static System.Windows.Forms.Label la = new Label();

Вы сделали статический ярлык, есть только один из них.Добавление метки , идентичной , в коллекцию Controls не имеет никакого эффекта.Вам нужно создать новый элемент управления Label:

private int labelCount;

private void label2_Click(object sender, EventArgs e)
{
    var la = new Label();
    la.Size = new Size(72, 77);
    la.Location = new Point(78, 191 + labelCount * (la.Height + 10));
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
    la.Text = "Make it visible";
    labelCount++;
    la.Name = "label" + labelCount.ToString();
    la.Click += new EventHandler(la_Click);
    Controls.Add(la);
}

void la_Click(object sender, EventArgs e)
{
    var la = (Label)sender;
    // You could use the Name property
    //...
}

Намерение этого кода трудно угадать, я просто написал что-то, что имеет видимые побочные эффекты.

1 голос
/ 09 июля 2011

Вы можете добавить обработчик кликов:

la.Click += new EventHandler(la_Click);

Тогда в обработчике:

void la_Click(object sender, EventArgs e)
{
    //add new label
}

Редактировать - Объяснение из комментариев. Ваш код будет выглядеть так:

public static System.Windows.Forms.PictureBox pc = new PictureBox(); 

public static System.Windows.Forms.Label la = new Label();

private void label2_Click(object sender, EventArgs e)
{
    label2.Visible = false;
    pictureBox2.Hide();
    Controls.Add(la);
    la.Location = new Point(78, 191);
    la.Size = new Size(72, 77);
    la.Image = _2WaySMSGatewayApp.Properties.Resources.message;
    la.Click += new EventHandler(la_Click);
}

void la_Click(object sender, EventArgs e)
{
    //the new label has been clicked
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...