2015-02-19 4 views
0

У меня есть заполненный диалог ListView. Если пользователь нажимает на параметр в ListView, новый диалог отображается над списком ListView.Отключение диалога мигания C#

Мои проблемы состоят в том, что когда я нажимаю новое диалоговое окно самого верхнего уровня (в ListView позади него), границы нового диалогового окна мигают/мигают несколько раз. Также мигает значок на панели задач. Я хочу отключить мигание, но не могу найти свойство для изменения.

Чтобы показать диалог мой, я использую следующий код:

if (detail == null) 
      detail = new Details(opt, val, user, desc, m_l); 
     else 
      detail = null; 
     detail.ShowDialog(); 
+2

Какие технологии вы используете? 'WebForms',' WinForms', 'WPF'? –

+0

Это было создано в Visual Studio 2010 C#. Я не знаю, что я использую любой из них. Есть ли простой способ рассказать? Спасибо. –

+0

Я использую System.Windows.Формы –

ответ

1

Кажется, что вы создаете модальные окна каждый раз. И вы не можете возобновить предыдущие диалоги до тех пор, пока не отпустите новое самое верхнее окно.

Взгляните на это wikipedia article для получения информации о модальных диалогах.

Я бы посоветовал вам посмотреть, как вы создаете/показываете свои окна. В WPF вы показываете окна с помощью Show() или ShowDialog(), однако, я не знаю, какой тип ListView вы используете

EDIT: За свой комментарий, вы хотите модальные диалоговые окна. Единственные способы, с помощью которых я могу попытаться удалить мигание, - это войти в WINAPI. Это не похоже на работу для .NET.

Я хочу предложить несколько вещей:

  • Посмотрите на варианты для показа каждого окна. See this MSDN page
  • Взгляните на варианты стилизации каждого окна. See this MSDN page
  • Пересмотрите ваш дизайн. Я знаю, что это может занять много работы, но наличие большого количества слоев окон является непривлекательным для большинства пользователей. В конечном счете, я считаю, что этот вариант сделает ваше приложение лучшим.
+0

Я бы хотел, чтобы моя программа выполняла то, что она делает. Я хочу, чтобы пользователь не смог возобновить предыдущие диалоги, пока они не отклонят новое самое верхнее окно. Тем не менее, мигание в 6-7 раз ненужно, и я хотел бы, чтобы он моргнул один раз или совсем нет. Проблема возникает, если пользователь дважды нажимает на параметр в ListView (вместо одного клика), новое диалоговое окно мигает 6 раз сразу. –

+0

@KyleWilliamson Я обновил свой ответ, чтобы дать вам несколько предложений. Мне кажется, вы действительно хотите модальные диалоги и просто хотите удалить эффект мигания. –

+0

Спасибо, Ник. Я буду следовать вашим предложениям и отправлять назад, если найду что-нибудь. Что касается нового дизайна, у меня есть только два диалога. Один из них - это список, а второй позволяет редактировать список, меняя выбранный параметр. –

2

Это предназначено поведение, это потому, что новый диалог modal. Он обращает внимание на то, что нужно что-то делать.

Если вам необходимо сделать немодальную форму, вместо использования ShowDialog() просто используйте Show().

+0

Благодарим вас за ответ. Я создаю новую форму. detail = new Подробности (opt, val, user, desc, m_l); detail.ShowDialog(); –

+0

yup, я отредактировал свой ответ, чтобы показать вам, как создать свою форму в виде немодальной формы. 'ShowDialog()' используется для запроса ответа от пользователя. – DrewJordan

+0

Я хочу запросить ответ от пользователя. Поэтому я полагаю, что ShowDialog() будет правильным для того, что я делаю. В моем ListView показан список параметров для отдельного приложения. Когда пользователь нажимает на параметр, появляется новый диалог. Затем пользователь заполняет новое значение для этой опции и нажимает кнопку, чтобы изменить новое значение на SQL-сервере. –

0

Благодарим всех вас за ответы и рекомендации. Я нашел лучший способ справиться со своей проблемой.

Я использовал событие ItemActivated. Это событие вызывается, когда был выбран выделенный элемент в ListView. Это стало проблемой, когда пользователь дважды щелкнул по уже выбранному элементу. Это приведет к появлению нового диалогового окна, но также будет выполняться несколько раз.

Используя событие DoubleClick, один щелчок на выбранном объекте ничего не делает. Двойной щелчок на выбранном или не выбранном элементе открывает диалоговое окно без вспышек. Вспышки все еще появляются, если вы попытаетесь щелкнуть мышью по диалоговому окну, но не так много.

Смежные вопросы