Удалить динамически добавленную метку на FlowLayoutPanel - PullRequest
2 голосов
/ 25 октября 2011

Я динамически добавляю Метка на FlowLayoutPanel со следующим кодом:

private void button1_Click(object sender, EventArgs e)
    {
        Label lb = new Label();
        lb.Text = "How are You";
        lb.Size = new Size(650, Font.Height +10);
        flowLayoutPanel1.Controls.Add(lb);
        flowLayoutPanel1.SetFlowBreak(lb, true);
        lb.BackColor = Color.Wheat;
    }

В ContextMenuStrip Я добавил два элементаДобавить и отредактировать и связать его FlowLayoutPanel , означает, что когда пользователь щелкнет правой кнопкой мыши на FlowLayoutPanel , появится меню «Редактировать и удалить».

Теперь я хочу удалить метку динамического добавления меткииспользуя кнопку удаления (ContextMenuStrip).Я хочу просто щелкнуть правой кнопкой мыши по желанию lebel и после щелчка правой кнопкой мыши его следует удалить.и тот же случай с кнопкой «Изменить» для редактирования.

1 Ответ

3 голосов
/ 25 октября 2011

хранит ссылку на вашу переменную lb в форме (а не только внутри функции).Если вы хотите удалить его, вызовите flowLayoutPanel1.Controls.Remove (lb).

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

В качестве альтернативы, так как обработчик события будет передавать объект-отправитель, который будет ссылаться на элемент управления, на котором сработало событие, вы можете просто вызвать. Удалить и передать в отправителя.вам не придется хранить ссылку на метку в этом случае, если она вам не нужна для чего-то другого.

Запрошенный пример

flowLayoutPanel1.Controls.Remove((ToolStripMenuItem) sender);

Отредактированоснова после комментариев

Я изменил событие нажатия кнопки button1 на

private void button1_Click(object sender, EventArgs e)
{
     lb = new Label();
    lb.Text = "How are You";
    lb.Size = new Size(650, Font.Height +10);
    flowLayoutPanel1.Controls.Add(lb);
    flowLayoutPanel1.SetFlowBreak(lb, true);
    lb.BackColor = Color.Wheat;
    lb.MouseEnter += labelEntered;
}

, как вы можете видеть, я добавил обработчик события MouseEntered, чтобы перехватить последний ярлык, над которым была наведена мышь.

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

private Label lastLabel;
private void labelEntered(object sender, EventArgs e)
{
    lastLabel = (Label)sender;
}

Код кнопки удаления был изменен на это.

public void Remove_Click(object sender, EventArgs e)
{
    if (lastLabel != null)
    {
        flowLayoutPanel1.Controls.Remove(lastLabel);
        lastLabel = null;
    }
}

Первое, что он проверяетчтобы убедиться, что lastLabel имеет значение, если он удаляет последнюю метку, над которой была наведена мышь, то очищает переменную lastLabel.

...