![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
ВладимирБерезин |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.4.2014 Репутация: нет Всего: нет |
Здравствуйте!
есть вот такой код:
Здесь, при выборе на главной форме пункта меню "Найти", выводится немодальная форма. Проблема вот в чём: при каждом клике по этому пункту меню создаётся новый экземпляр диалогового окна. Вопрос: как этого избежать? Не хотелось бы переменную sed выносить за пределы метода найтиToolStripMenuItem_Click и делать её полем класса. Некрасиво это как-то... |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
почему некрасиво? если у вас логика требует одной формы то в любом случае вам нужно хранить ее в одной переменной. Можно синглтон замутить.
Мне кажется вам не обязательно иметь именно одну форму. скорее всего вопрос в данных в этой форме. Можно их сохранить и заполнять форму сохраненными данными. тогда визуально это будет выглядеть как одна форма. P.S. а вот такие названия "найтиToolStripMenuItem_Click" это действительно "некрасиво". |
|||
|
||||
ВладимирБерезин |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.4.2014 Репутация: нет Всего: нет |
Вот тут я не очень понял. У меня диалоговое окно размножается. |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
Ну мысль была в том, что при клике по кнопке окно можно просто закрыть и открыть заново, только данными заполнить. Но для этого придется вынести переменную из метода. Кстати, почему это некрасиво? если есть такая логика, то по другому не получится. В любом случае придется проверить есть ли такая форма. И если есть то попытаться что то с ней сделать.
|
|||
|
||||
ВладимирБерезин |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.4.2014 Репутация: нет Всего: нет |
Вы меня убедили. В конце концов я сделал вот так:
Это сообщение отредактировал(а) ВладимирБерезин - 22.10.2015, 11:12 |
|||
|
||||
chupachups |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 15.10.2008 Репутация: нет Всего: 1 |
И что? работает?
Копни в другую сторону, смотри ниже, только я не уверен, что в качестве sender идет объект типа ToolStripMenuItem, так как не использую этот глючный контрол.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
ВладимирБерезин |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.4.2014 Репутация: нет Всего: нет |
Работает. |
|||
|
||||
Rokforus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 27.3.2008 Репутация: нет Всего: 1 |
А как оно работает в случае, если несколько раз выбрать пункт меню "Нажать" ?
Получается, код будет продолжать создавать новые экземпляры SearchDialog формы. Из условий задачи я понял, что это нужно избегать. Думаю, если класс SearchDialog реализовать через шаблон Singleton, то new SearchDialog() всегда будет возвращать указатель на одну и ту же форму и метод form.Show() должен будет работать с одним и тем же окном. Правда, в этом случае есть смысл дополнительно вызвать form.Activate() для перехода на форму. Хороших выходных! Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
chupachups |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 15.10.2008 Репутация: нет Всего: 1 |
@Rokforus, и как же может выглядеть шаблон Singleton для использования через конструктор, а не через статический метод?
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Rokforus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 27.3.2008 Репутация: нет Всего: 1 |
Вы правы - скорее всего академический Singleton тут сложно применить.
Тем не менее я могу предложить свой рабочий вариант, который делает именно так, как я описал выше:
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
chupachups |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 15.10.2008 Репутация: нет Всего: 1 |
Сразу могу предположить что как минимум в 75% случаев понадобится писать так:
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |