2011-01-26 9 views
6

Winforms Appに2つのフォームクラス(Form1とForm2)があります。少なくとも1つのモーダルウィンドウが開いているときにwinformsアプリケーションを最小化する方法

Form1は、このようなものです:

Form1 with a button on it

Form2のは、このようなものです(ShowInTaskbar =偽):

Form2 with an OK and Cancel buttons

し、Form1上でこのコード:

Form2 someForm = new Form2(); 
    private void btOpenAnotherWindow_Click(object sender, EventArgs e) 
    { 
     if (someForm.ShowDialog(this) == DialogResult.OK) 
      MessageBox.Show("OK!!!"); 
     else 
      MessageBox.Show("Not OK."); 
    } 

つまり、ボタン付きウィンドウをモーダルに開きます別のウィンドウをクリックし、ユーザーが2番目のウィンドウを閉じるのを待ちます( "OK"または "キャンセル"ボタンをクリックします)。どのように閉じられたかによって、アクション(ここではMessageBox.Show()呼び出し)を交互に実行します。

私が必要:

  1. 、ユーザが同時に複数のウィンドウを使用することができます。 (モーダルフォームなので、私はShow()の代わりにShowDialog()を使用した)
  2. フォームが閉じたときに、フォームが閉じられた方法に応じて何かをする(if(someForm.ShowDialog(this)...) WHOLE APPを最小限に抑えるために(ユーザーなど)できるようにするには
  3. 正しく元の状態に「unminimize」アプリすることができるようにする。
  4. WIN + M(すべてを最小化)に対応するためのプログラムキーの組み合わせ

上記の例では、2つの方法で失敗します。

  1. WIN + Mに応答しない(必要性5)
  2. (必要性3)タイトルバーのボタンをクリックすると最小化しますが、メインフォーム(Form1)がないので、それは錯覚であるとき、アプリは最小限に抑えるように思えます最小化されず、実際には他の開かれたウィンドウの後ろに隠れています。空のデスクトップでサンプルを実行するだけで、実際に何が起こるかがわかります。 PICは、次のとおりです。

    Empty desktop with the app running

    後:注 Empty desktop with the Form2 (someForm) minimized

    1. メインフォームが
    2. 最小化されていない

    は前にボタンがクリックされた最小化Form2画面の左端にあります。

Form2は完全なウィンドウです(ダイアログウィンドウそのものではありません)。私はユーザーが閉じていなければそれを操作する必要があります。また、ユーザーはアプリケーションを完全に無効にする必要があります彼はそれを必要とする。

私はここに実際のフォームを投稿することはできません、それはこれらのモックアップよりも明確になります。

多くのレベルのモーダルウィンドウ(この例のように2つだけでなく)で動作するソリューションが必要です。助言がありますか?

答えて

0

APIコールを使用してこの機能をハッキングする方法はありますが、実際のウィンドウではなくメインフォーム内のコントロールでいくつかのオーバーレイを行うことをおすすめします。これにより、あなたはそれを "モーダル"にして、メインウィンドウを最小化/サイズ変更する能力を持つことができます。

+0

私は、全体の窓(偽= this.enable)を無効にし、ShowDialogメソッドの代わりにショーを使用していますが、それは、「開かれているすべてのウィンドウを最小化」の問題に何もしないことができます。 –

1

ここで何をしようとしているのか、少し詳しい情報が必要な場合があります。私はボタンをクリックすると

private void button1_Click(object sender, EventArgs e) 
    { 
    Form1 form2 = new Form1(); 
    form2.ShowDialog(); 
    } 

、私は同じ形の2番目のインスタンスを取得しますが、それはモーダルです:私はこのコードを呼び出し、その上にボタンで簡単なフォーム(Form1)を、持っています。私はまだこの2番目のモーダルフォームを最小化するオプションを持っています(明らかに最初のフォームと対話できません)。2番目のフォームを最小化すると、アプリケーション全体が最小化されます。今明らかにあなたは質問をしているので、私はあなたを理解しているとは思わない。 =)このシナリオはどうしたらいいですか?

  • C
+0

2番目の(モーダル)ウィンドウを最小化すると、アプリケーションのメインフォームはフリーズしたままであり、最小化する方法がないため、デスクトップにアクセスする方法がありません。ユーザーが必要とするのは、モーダルウィンドウが開いているにもかかわらず、アプリケーションのメインフォームを最小限に抑える方法です。そのため、他のアプリケーションで一時的に他の作業をしたり、デスクトップとやりとりすることさえできます。 –

+0

ヤンコ - 私はあなたの問題を繰り返すことができません。 ==どのようなオペレーティングシステムを使用していますか?実行中の.NET Frameworkのバージョン –

+0

こんにちは私の開発環境は.NET Framework 3.5 SP1およびVS .NET 2008を搭載したWindows XP Pro SP3で実行されています。 Windows Vistaのシステムで同じ結果をテストしました。ところで、あなたと私のポストに答える時間を取ったすべての人に感謝します。 –

関連する問題