0

だから私はオーバーレイを作っています、そして私はそれが常に一番上にある必要があります。そうするために、私はちょうど設定します

chackBox1.checked = true;

private void checkChanged(object sender, EventArgs e)
{
        this.TopMost = checkBox1.Checked;
}  

多くの場所で提案されているように。ここでの問題は1)チェックボックスボタンが必要です...しかし、それは問題ではありません。Visible=falseに設定できます。2)マウスで手動でチェックボックスをオンにするまで、機能しません。チェック済みに設定し、form1.isTopMost = true(initComponentsの後)に設定してcheckChangedイベントを呼び出した場合でも、常にトップに留まる前に、常に手動でチェックボックスをオンにする必要があります。

助けてください!オーバーレイが常に一番上に読み込まれるようにするにはどうすればよいですか?

次のステップは、フォームを強制的に上に配置するスレッドを作成することですが、このLOLは避けたいと思います。

ありがとう、

デイブ

4

3 に答える 3

2

設定Topmost = trueするgetfocusと、lostfocus実行中のEXEからメッセージボックスがポップアップ表示されるまで正しく機能します。ポップアップメッセージボックスのトップバーをクリックすると、ウィンドウがバックグラウンドに戻ります。

これを試してください。これを実現するための非常に堅牢な方法です。

namespace WindowsFormsApplication52
{
    public partial class Form1 : Form
    {
        static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
        static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
        static readonly IntPtr HWND_TOP = new IntPtr(0);
        static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
        const UInt32 SWP_NOSIZE = 0x0001;
        const UInt32 SWP_NOMOVE = 0x0002;
        const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);
        }
    }
}
于 2012-09-12T06:43:36.233 に答える
1

他に何か問題があります。これらのプロパティ変更イベントは、コードによって行われたか、コントロール自体のコードによって行われたか、データバインディングによって行われたかに関係なく、プロパティ値が変更されるたびに発生します。チェックがすでにtrueの場合、チェックボックスの状態が変わるまでハンドラーを起動しない場合があります。

checkChanged(..)プログラムでcheckBox1をtrueに設定した場合、またはチェックボックスを手動でチェックした場合に表示するには、イベントでMessageBoxを起動する必要があります。これはデバッグに役立ちます。checkChangedはこのタイプのイベントの一般的なデフォルト名ではないため、別のイベントハンドラー関数を完全に指すように変更したと思います。

于 2011-06-24T18:53:59.157 に答える
0

OKみんな!助けてくれてありがとう、彼がそれを引き起こしたので、私は0A0Dに答えを与えるでしょう!

ウィンドウのフォーカスイベントとアンフォーカスイベントの両方でTopMost=trueを設定し、初期化後に.Focus()と.Showを使用すると、すべてが機能しているように見えます。

ありがとう!

于 2011-06-24T19:04:42.237 に答える