Рейтинг:
36
JF2015
Просто чтобы удалить его из списка элементов управления, фактически не разрушая объект button:
Button myNewButton = new Button();
private void MyExistingButton_Click(object sender, EventArgs e)
{
myNewButton.Text = "ClickMe";
myNewButton.Location = new Point((Width - myNewButton.Width) / 2, (Height - myNewButton.Height) / 2);
myNewButton.Click += new EventHandler(myNewButton_Click);
Controls.Add(myNewButton);
}
void myNewButton_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello World!");
}
private void MyExistingButton2_Click(object sender, EventArgs e)
{
if(Controls.Contains(myNewButton))
Controls.Remove(myNewButton);
}
ZPS769
Не совсем так, но после того, как я увидел эти 3 ответа, я понял решение .
спасибо всем вам
Sergey Alexandrovich Kryukov
Вы тоже предполагаете, что родительский элемент управления-это форма или элемент управления, объявляющий методы, которые вы публикуете здесь.
Даже если это и так, то только из-за неряшливости компоновки. Обычно такие элементы управления размещаются на одних и тех же панелях и т. д. Достаточно просто указать на API.
Кроме того, обратите внимание на Соглашения об именах: такие имена, как "myNewButton_Click", берутся из кода, автоматически сгенерированного дизайнером. Это не означает, что они должны использоваться: даже если они генерируются Microsoft, такое имя нарушает Соглашения об именовании Microsoft, всегда должно быть переименовано. Но мой лучший совет-никогда не генерировать обработчики событий автоматически, это не ускоряет разработку (но является источником многих путаниц), самый простой и поддерживаемый способ-использовать анонимные делегаты (начиная с C# V. 2).
(Я не голосовал.)
--СА
Espen Harlinn
Хороший ответ :)
Abhinav S
Хороший ответ. 5.
Рейтинг:
17
Manas Bhardwaj
Давайте сделаем это шаг за шагом:
1.) вместо того чтобы объявлять myNewButton локальной переменной, сделайте ее глобальной переменной. (Я бы предпочел создать класс, который будет хранить мои динамические элементы управления)
2.) Теперь в каком-то другом событии (что бы это ни было) вы можете удалить/удалить его из элементов управления[^].
if(Controls.Contains(myNewButton ))
{
Controls.Remove(myNewButton );
}
Sergey Alexandrovich Kryukov
Манас, достаточно было бы просто срезать код.
Вы играете с глобальной/локальной переменной или классом для хранения элементов управления-все напрасно: это все равно не настоящее приложение; и все переменные кнопки объявлены в форме и видны в точке вызова; странно, что вы не позаботились о родителе: код выглядит так, как будто вы вызываете родительский метод. Почему? вы не должны предполагать, что родитель-это форма.
--СА