Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Удаление динамического компонента


Автор: Fyrklod 2.10.2007, 09:31
В топе http://forum.vingrad.ru/forum/topic-174772.html я уже спрашивал как создавать на форме в программе компонент ... пришел черед его удалить....
пришла как бы мысль, делать на эту панель СontextMenu,  но как на мою созданную уже в программе панель направить эту Меню?

И вообще обобщая данную пробелму .. как в программе описывать действия над не существующими элиментами? т.е. клик по панели, которая появится только в процессе программы

заранее спасибо

Автор: marcusmae 2.10.2007, 10:33
Цитата(Fyrklod @  2.10.2007,  09:31 Найти цитируемый пост)
пришла как бы мысль, делать на эту панель СontextMenu,  но как на мою созданную уже в программе панель направить эту Меню?


Не-не, немножко не так. Если я правильно понял вопрос, то для того, чтобы оперировать с контекстным меню обычно не нужно описывать его появление, исчезновение и тп. Руки отвалятся писать smile На самом деле, почти для всех контролов предусмотрено свойство ContextMenuStrip, которому присваивается ссылка на одно из всплывающих контестных меню, которые ты можеш создать, например, просто бросая их на форму в дизайнере. Установив это свойство, можно проверить, что контекстное меню будет появляться при нажатии на правую кнопку в клиентской области контрола.

Цитата(Fyrklod @  2.10.2007,  09:31 Найти цитируемый пост)
как в программе описывать действия над не существующими элиментами?

т.е., теми, которые ещё не появились, но появятся. Ответ : как угодно. Здесь лучше какой-нибудь конкретный пример посмотреть.

А по поводу удаления - у свойства .Controls родительского контрола для этого есть три функции :
Код

            this.Controls.Remove(control); // удалить контрол по ссылке
            this.Controls.RemoveAt(controlIndex); // удалить контрол по номеру индекса
            this.Controls.RemoveByKey(controlName); // удалить контрол по имени контрола

Автор: archeg 2.10.2007, 12:29
Цитата(Fyrklod @  2.10.2007,  09:31 Найти цитируемый пост)
как в программе описывать действия над не существующими элиментами?

Код

Button MyButton = new Button();
this.Controls.Add(MyButton);
// Изменяешь свойства
MyButton.Text = "My Dynamic Button";
// Цепляешь событие
MyButton += delegate {MessageBox.Show("Button pressed")};
// Удаляшь елемент
this.Controls.Remove(MyButton);

По-скольку ты каждый раз будешь создавать / удалять елемент - это довольно медленно - лучше всего просто поставиь MyButton.Visible = false;

Хранишь где-то у себя масив всех твоих созданых кнопочек и управляешь ими через этот масив) Как вариант можно сразу перебирать в форме контролы:
Код

foreach (Conrol ctr in this.Controls)
{
   if (ctr is Button)
   {
      (Button)ctr.Text = "New button caption";
   }
   if (ctr.Name = "myTextBox")  (TextBox)ctr.Text = "This is textbox";
 
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)