2011-06-24 6 views
0

私はオーバーレイを作成しており、常に上にする必要があります。そうするために、私はちょうど設定しますC# - 常に上のウィンドウの問題

chackBox1.checked = true; 

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

多くの場所で示唆されているように。ここでの問題は です。1)私はチェックボックスボタンが必要ですが、問題は起きていません。Visible = falseに設定することができます。 2)マウスで手動でボックスをチェックするまでは動作しません!チェックしても、initComponentsの後にform1.isTopMost = trueと設定してcheckChangedイベントを呼び出すと、常に上に表示される前に手動でチェックする必要があります。

助けてください!オーバーレイが常に上に表示されるようにするにはどうすればよいですか?間違って何か他のものがありLOL

おかげで、

デイブ

+4

は、この、これを達成するための非常に堅牢な方法を試してみてください? –

+0

私はプロパティインスペクタに精通していません、詳細を教えてください。すべての例が使用されているので、チェックボックスコントロールを使用しました –

+0

@David:Visual Studioでコントロールのプロパティを意味します。 –

答えて

1

私の次のステップは、上に滞在するためのフォームを強制的にスレッドを作っているが、私はこの問題を回避したいと思います。これらのプロパティー変更イベントは、プロパティー値が変更されるたびに、これがコードによって行われたかどうかにかかわらず、コントロールのコードまたはデータバインディングによって発生します。チェックされている場合は、チェックボックスの状態が変わるまでハンドラが起動しないことがあります。

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

0

皆さん!助けてくれてありがとう、0A0Dへの答えは彼がそれを引き起こしてから与えるだろう!

私は、ウィンドウのフォーカスとフォーカスなしイベントの両方でTopMost = trueを設定し、初期化後に.Focus()と.Showを使用します。

ありがとうございます!あなたが実行しているいくつかのEXEからポップアップメッセージボックスを持つまでgetfocuslostfocusTopmost = trueを設定

+0

私は受け入れていただければ幸いですが、あなたのものはそれを修正したものです。私はいずれにしてもうれしいです。 –

2

はapparantly作品、ポップアップメッセージボックスの上部のバーをクリックすると、背景にあなたの窓を取るだろう。なぜ、あなただけのフォームのプロパティインスペクタの一番上を設定し、チェックボックスをドロップされていません

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); 
     } 
    } 
} 
関連する問題