Чтобы воссоздать это поведение, вам необходимо создать всплывающую форму со следующими свойствами:
(1) ShowInTaskBar = False
(2) Отобразите форму с помощью метода Show и зацикливайтесь, пока форма не станет видимой.
(3) Чтобы закрыть форму при щелчке мышью вне ее, переопределите OnDeactivate и установите для параметра visible значение False.
Затем создайте другую форму, которая будет отображать всплывающее окно при нажатии кнопки:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Syste
Using pop As New PopUp
pop.Visible = True
Do While pop.Visible
Application.DoEvents()
NativeMethods.MsgWaitForMultipleObjectsEx(0, IntPtr.Zero, 250, &HFF, 4)
Loop
Me.Activate()
End Using
End Sub
Запустите проект, разверните форму, чтобы заполнить экран, и нажмите кнопку, чтобы открыть всплывающее окно. Затем щелкните в любом месте исходной формы. В большинстве случаев, но не всегда, исходная форма исчезает на долю секунды, прежде чем появится снова, что вызывает эффект мерцания.
Углубившись в отражатель и System.Windows.Forms.Design.DropDownHolder, я обнаружил в CreateParams следующее, которое решает проблему мерцания:
createParams.Style = (createParams.Style Or -2139095040)
К сожалению, он также обводит форму черной рамкой. (Вам нужно установить FormBorderStyle = System.Windows.Forms.FormBorderStyle.None, чтобы это увидеть.)
Кто-нибудь знает, что делает этот стиль, кроме черной рамки вокруг формы?
Я искал в Google номер и его шестнадцатеричный эквивалент, но ничего не нашел.
Спасибо.
ETA: я просмотрел список констант стиля в pinvoke .net, но я не стал мудрее.