1

要重新创建此行为,您需要创建一个具有以下属性的弹出表单:

(1) ShowInTaskBar = 假

(2) 使用 Show 方法显示表单并循环直到表单不可见。

(3) 为了在鼠标点击离开窗体时关闭窗体,覆盖 OnDeactivate,并将可见设置为 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上查看了样式常量列表,但我并不聪明。

4

1 回答 1

3
-2139095040 = 0x80800000 = WS_POPUP | WS_BORDER

这似乎也是边界的罪魁祸首。

于 2009-11-25T00:24:39.130 回答