Мигание формы при смене свойства ShowInTaskbar

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Мигание формы при смене свойства ShowInTaskbar

Сообщение Drag » 08.12.2014 (Пн) 16:45

Приветствую всех.
Помогите, пожалуйста, разобраться с такой проблемой:
Есть проект с главной и несколькими вспомогательными формами, все вспомогательные формы вызываются из главной как модальные окна. Все формы имеют FormBorderStyle = Fixed3D
Встала задача отображать в панели задач только самую верхнюю форму, то есть при открытии второй формы первая временно исчезает из панели задач.
Написал для вспомогательных форм небольшой метод:
Код: Выделить всё
Public Sub ShowDialogEx(ByVal parent As Form)
        parent.ShowInTaskbar = False
        Me.ShowDialog()
        parent.ShowInTaskbar = True
    End Sub


Однако, при каждой смене значения свойства ShowInTaskbar родительская форма быстро исчезает, проявляется заново и перерисовывается. Эффект частично удалось устранить с помощью свойства DoubleBuffered, но хотелось бы убрать ее исчезание и проявление. Возможно ли это сделать средствами .Net, или придется воспользоваться API-функциями?
Я не сплю, я перешел в режим замедленного функционирования.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 09.12.2014 (Вт) 12:02

Зачем это надо, если при ShowDialog из таскбара всё равно будет разворачиваться нужная форма?

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Re: Мигание формы при смене свойства ShowInTaskbar

Сообщение Drag » 09.12.2014 (Вт) 13:01

Дело в том, что при большом количестве открытых форм (если у всех, кроме главной, ShowInTaskbar = False) бывает сложно найти активную форму, поскольку при клике на неактивной форме, активная форма мигает только если у нее ShowInTaskbar = True. Иначе звучит только системный бип.
К тому же, допустим, есть главная форма frmMain(ShowInTaskbar = True) и вспомогательная форма frmEdit(ShowInTaskbar = False). Из frmMain было выполнено frmEdit.ShowDialog. Затем юзер развернул постороннее окно поверх обеих форм. Когда он решил вернуться обратно к этим формам, он кликает по соответствующему пункту в панели задач. И у него проявляется заблокированная frmMain, где он ничего не может сделать. Чтобы вернуться к frmEdit, ему приходится искать ее через Alt+Tab.

Поэтому и было решено в таскбаре всегда отображать только активную форму.
Я не сплю, я перешел в режим замедленного функционирования.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.12.2014 (Ср) 12:09

Drag писал(а):активная форма мигает только если у нее ShowInTaskbar = True. Иначе звучит только системный бип.

Разве? Надо проверить, мне казалось, что не так...

Drag писал(а):Затем юзер развернул постороннее окно поверх обеих форм.

C always on top что ли? Ну и сам виноват. Зачем химичить какую-то магию, когда всё и так хорошо?


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList