2009-07-18 9 views
2

VSTS 2008 + C#+ .Net 2.0を使用してWindowsフォームアプリケーションを開発しています。デフォルトのForm1にはボタンがあり、ボタンをクリックすると別のForm - Form2が呼び出されます。Windowsフォームを常に上に表示させる方法は?

私の質問は、ユーザーがForm1を処理し続けることができるまでForm2を常に先頭にしたい、つまりユーザーがForm2に応答する必要があります(Form2で情報を記入して閉じてください)。この機能を実装する方法は?

ここは私の現在のコードです。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 form2 = new Form2(); 
     form2.Visible = true; 
    } 
} 

答えて

16

を試してみてください。これを行うには、

​​

メソッドを呼び出します。あなたは彼らがあなたがShowDialog()方法をしたい、Form2をして終わっまでのForm1との相互作用からユーザーを防ぐためにしたいと仮定すると、

+0

+1 - ジョージは最上位ではなくモーダルダイアログを使用する必要があります。 –

+0

おかげでアレックス、あなたのソリューションは動作します! – George2

+0

トレイアプリを持っていて、トレイアイコンやホットキーをクリックして他のウィンドウの一番上になりたい場合は、私のアプリは開いているが、他のウィンドウの下に隠れている(隠れている)。@Mihailの答えは良いと思った?または私は間違って落ちる? –

8

正確に何をしたい行うための最善の選択肢は、Form2のダイアログボックスにすることです。この

this.TopMost = true; 
+0

申し訳ありませんが、あなたのソリューションが動作しません。私はコードform2.TopMost = trueを追加しましたが、コードを追加した後でもForm2を削除してForm1への応答を続けることができます。どんなアイデアが間違っている? – George2

+0

1つのアプリケーション(多くのフォーム)に最適なソリューションは、ShowDialogメソッドです。 –

1

。ネイティブ.NET theresので

0

上にフォームを入れて、そこにそれを保持する方法はありません。

作成のみの上にフォームを設定しますForm.TopMost。 Form.ShowDialog()は、そのアプリケーションのすべてのフォームの上にフォームを設定しますが、他のアプリケーションの後ろに後ろにスローすることもできます。

は、私たちはそのような場合に対処するためにネイティブのWin32へのいくつかのP /呼び出し、コールを使用しますが、正確に呼ん覚えていないことに注意してください。とにかく100%に達することは決してありませんでした。

2

Win32 :: SetWindowPos()メソッドを使用して、HWND hWndInsertAfterをHWND_TOPMOSTに設定して、上に留めることができます。

SetWindowPosドキュメントのここを見て:ここで http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx

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

は、いくつかの例は以下のとおりです。 http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html

関連する問題