![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
voodoo_alik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Подскажи всезнающий All !!!
Есть форма А, на ней две кнопки Exit и Join, есть меню, а так-же комбобоксы, листбоксы и т.д.... Я создаю новую форму в проекте, назовём её форма "Б", затем наследуюсь от формы "А". Вопрос, как исбавиться от излишней реализации, т.е. мне нужно оставить на форме "Б" только одну кнопку Exit и меню, а всё остальное убрать ? Пердпологаю, что нужно в событие form_load уничтожать ненужные объекты.... Только как ? Dispose() ? Спасибо... Это сообщение отредактировал(а) voodoo_alik - 14.9.2007, 19:14 |
|||
|
||||
iad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: нет Всего: -2 |
Изврат имхо. Продумать иерархию классов проще чем потом в наследниках удалять возможности предков..
|
|||
|
||||
voodoo_alik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Понимаю что изврат
![]() Дело всё в том, что когда начинал писать проект, то необходимоть была только в двух формах, а сейчас появилась нужда ещё и в третей и в четвёртой... Если бы знал что так всё будет, то создал бы нормальную родительскую, а сейчас весь проект переделывать под это в лом... легче наследоваться от стандартной form ![]() Попробовал так: в конструкторе дочерней: foreach (Control c in this.Controls) { (if c.name != "Exit" && c.name != "MenuStrip") c.Dispose(); } почему-то не сработало... |
|||
|
||||
yar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
Хм )). Думаю, лучше внести изменения в иерархию, чем "бороться" с ней в дочерних классах.
Можно, например, создать новую родительскую форму, общую для всех, например BaseForm с кнопкой и меню. Затем в той, которая сейчас является родительской изменить родителя на BaseForm, и добавить туда остальные контролы. В итоге, для всех форм проекта не нужно будет менять родителя. А форму "Б" можно будет наследовать от BaseForm, и не беспокоиться об удалении ненужных контролов. ps: всё-таки удалить контрол с формы можно с помощью Controls.Remove(control) Это сообщение отредактировал(а) yar - 14.9.2007, 20:09 --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
|||
|
||||
voodoo_alik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
2 ласт:
А там куча кода и в иерархию очень тяжело внести изменения (я не говорю что не возможно...). Хотелось бы научится удалять избыточные контролы на всякий случай... 8-P И всё-же, может это и лишнее, но неплохо было-бы разобраться... Интеренсно узнать, может кто из спецов подскажет, почему при таком коде, в конструкторе формы: froeach (Control c in this.Controls) c.Dispose(); Удаляются не все контролы, которые пренадлежат форме, а только часть, остальные продолжают висеть на ней(форме) и получается что Dispose или foreach не работает для остальных... Простите, может быть это ламерское ( 8-P ) наблюдение, но не совсем понятно почему так происходит, попробуйте сами сделать то же самое... |
|||
|
||||
yar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
Потому что коллекция модифицируется во время цикла по ней. --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
|||
|
||||
voodoo_alik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Так и понял...
Вот решение
Это сообщение отредактировал(а) voodoo_alik - 15.9.2007, 11:23 |
|||
|
||||
iad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 10.9.2007 Где: Москов Репутация: нет Всего: -2 |
Работает и слава Богу.. Но по моему так делать нельзя. Мы удаляем контрол, который возможно где-то в дебрях кода предка може использоваться и в последствии могут возникнуть ненужные эффекты.. Я бы просто сделал ненужные контролы невидимыми - риска заполучить неприятности будет меньше..
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 11 Всего: 149 |
Именно! Зачем наследоваться от А? Почему бы не наследовать В от класса Form и положить на него кнопку и меню? А то что ты сделал противоречит ООП. Наследник НЕ должен ничего удалять из предка, только расширять его функциональность. |
|||
|
||||
Tauler |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
надо this.Remove © Добавлено через 1 минуту и 24 секунды юлин, "с" в копирайт превратил ![]() this.Remove ( c ); Dispose - это для GС, а он когда хочет тогда и запускается |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
а вот и нет, метод Dispose вызывается и отрабатывает непосредственно сразу же. -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |