Как: добавить в коллекцию контролов или удалить из неё во время выполнения
Распространенные задачи в разработке приложений — добавление элементов управления и удаление элементов управления из любого элемента управления контейнера в формах (например, элемент управления Panel или GroupBox или даже сама форма). Во время разработки элементы управления можно перетаскивать непосредственно на панель или в групповой блок. Во время выполнения эти элементы управления поддерживают коллекцию Controls
, которая отслеживает, какие элементы управления помещаются на них.
Заметка
В следующем примере кода демонстрируется, как это применимо для любого элемента управления, который поддерживает коллекцию элементов управления в своей структуре.
Добавление элемента управления в коллекцию программным способом
Создайте экземпляр добавляемого элемента управления.
Задайте свойства нового элемента управления.
Добавьте элемент управления в коллекцию
Controls
родительского элемента управления.В следующем примере кода показано, как создать экземпляр элемента управления Button. Для нее требуется форма с элементом управления Panel и что уже существует метод обработки событий для создаваемой кнопки
NewPanelButton_Click
.Public NewPanelButton As New Button() Public Sub AddNewControl() ' The Add method will accept as a parameter any object that derives ' from the Control class. In this case, it is a Button control. Panel1.Controls.Add(NewPanelButton) ' The event handler indicated for the Click event in the code ' below is used as an example. Substite the appropriate event ' handler for your application. AddHandler NewPanelButton.Click, AddressOf NewPanelButton_Click End Sub
public Button newPanelButton = new Button(); public void addNewControl() { // The Add method will accept as a parameter any object that derives // from the Control class. In this case, it is a Button control. panel1.Controls.Add(newPanelButton); // The event handler indicated for the Click event in the code // below is used as an example. Substitute the appropriate event // handler for your application. this.newPanelButton.Click += new System.EventHandler(this. NewPanelButton_Click); }
Удаление элементов управления из коллекции программным способом
Удалите обработчик событий из события. В Visual Basic используйте ключевое слово RemoveHandler Statement; в C#используйте оператор -=.
Используйте метод
Remove
для удаления требуемого элемента управления из коллекцииControls
панели.Вызовите метод Dispose, чтобы освободить все ресурсы, используемые элементом управления.
Public Sub RemoveControl() ' NOTE: The code below uses the instance of ' the button (NewPanelButton) from the previous example. If Panel1.Controls.Contains(NewPanelButton) Then RemoveHandler NewPanelButton.Click, AddressOf _ NewPanelButton_Click Panel1.Controls.Remove(NewPanelButton) NewPanelButton.Dispose() End If End Sub
private void removeControl(object sender, System.EventArgs e) { // NOTE: The code below uses the instance of // the button (newPanelButton) from the previous example. if(panel1.Controls.Contains(newPanelButton)) { this.newPanelButton.Click -= new System.EventHandler(this. NewPanelButton_Click); panel1.Controls.Remove(newPanelButton); newPanelButton.Dispose(); } }
См. также
.NET Desktop feedback