要重新创建此行为,您需要创建一个包含以下属性的弹出窗体:
(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才能看到这个。)
除了将黑色边框放在表格周围之外,有没有人知道这种风格会做什么?
我用数字和十六进制等效搜索谷歌,但什么都找不到。
感谢。
ETA:我已经看过pinvoke.net的样式常量列表,但我不是更明智的。
答案 0 :(得分:3)
-2139095040 = 0x80800000 = WS_POPUP | WS_BORDER
这似乎也是边境的罪魁祸首。