1

この動作を再現するには、次のプロパティを持つポップアップ フォームを作成する必要があります。

(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

プロジェクトを開始し、フォームを画面全体に拡大し、ボタンをクリックしてポップアップを開きます。次に、元のフォームの任意の場所をクリックして戻します。必ずというわけではありませんが、ほとんどの場合、元のフォームが一瞬消えてから再び現れるため、ちらつき効果が生じます。

Reflector と System.Windows.Forms.Design.DropDownHolder を掘り下げると、ちらつきの問題を解決する CreateParams で次のことがわかりました。

createParams.Style = (createParams.Style Or -2139095040)

残念ながら、フォームの周りに黒い境界線も表示されます。(これを表示するには、FormBorderStyle = System.Windows.Forms.FormBorderStyle.None を設定する必要があります。)

フォームの周りに黒い境界線を配置すること以外に、このスタイルが何をするか知っている人はいますか?

番号と16進数でGoogleを検索しましたが、何も見つかりません。

ありがとう。

ETA: pinvoke.netでスタイル定数のリストを見てきましたが、私は賢くありません。

4

1 に答える 1

3
-2139095040 = 0x80800000 = WS_POPUP | WS_BORDER

これも国境の原因のようです。

于 2009-11-25T00:24:39.130 に答える