2009-05-03 7 views
1

ShowDialog()を一番上にしないように設定する方法はありますか?私は関連するすべての質問を見てきましたが、どれもと全く同じです。が私の状況にマッチしました。ShowDialog()を一番上にしないように設定できますか?

私がやることは、DataGridviewボタンの列から新しいWinFormを開くことです。この新しいフォームは、いくつかのSQLiteテーブルから情報を取得し、ボタンがクリックされた行に情報を追加できるようにします。

以下のコードを使用してWinFormを開きます。私はShowDialog()メソッドを使用して、ユーザーが情報をフォームに保存するかキャンセルするかを知ることができます。

私はこれを行うので、データグリッドビューの情報をリロードする必要があるかどうかを確認できます。

ユーザーがウィンドウに入力できる情報は、Webブラウザーのような他のソースからの情報なので、フォームをすべてのアプリケーションの上に置くことは理想的ではありません。

すべてのアプリケーションの上にウィンドウが表示されないようにする方法がありますか(私の一連のウィンドウの一番上です)、またはユーザーが別のフォーム上でクリックするボタンを指定する方法があります、paywindow.Show()を使用し、別のタイプのリターンを監視する)

ありがとうございました!

答えて

1

使用このような何か: をForm1:

private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 frm = new Form2(); 
      frm.Show(); 
      frm.FormIsClosing += frm_FormIsClosing; 

     } 

     void frm_FormIsClosing(object sender, DialogResult rsl) 
     { 
      if (rsl == System.Windows.Forms.DialogResult.Yes) 
       MessageBox.Show("We got it"); 
     } 

のForm2:

public delegate void IsClosing(object sender, DialogResult rsl); 

     public event IsClosing FormIsClosing; 


     private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      FormIsClosing(this, System.Windows.Forms.DialogResult.Yes); 
     } 

、あなたが火をFormIsClosing、Form2のを閉じて、あなたはfrom1はそれをキャッチすることができます;)

+0

私はこれがうまくいくと確信していましたが、Form2_FormClosedまたはForm2_FormClosingイベントを起動することはできませんでした。 私は別のSOの質問に配置されるform2を見て答えを見つけました。ありがとう! –

+2

Form2_FormClosedをform2のClosedイベントに追加してください!とにかく、幸運 – Sadegh

+0

私は初めて何をしたか分かりませんが、FormClosedイベントをダブルチェックし、正しく実装されていませんでした - これは私が必要とするソリューションです - ありがとう! –

-1
paywindow.ShowDialog(this) 
+0

これは何ですか? – Sadegh

+0

ダイアログボックスの親 – DaDa

+0

私は知っているが、そのナンセンスは、全く質問には関係なく、ちょうどそれを試してみよう – Sadegh

1

デフォルトでは、「すべてのアプリケーションの意味で」フォームはTopMostであってはいけません。あなたがその行動を見ているなら、そのプロパティはデザイナーに設定されている可能性が高いです。デザイナでプロパティを設定解除するか、次の操作を試してください。

using (Form form = CreateMyForm()) { 
    form.TopMost = false; 
    form.ShowDialog(parent); 
    ... 
} 
+0

問題は、Show()ではなくShowDialog()でフォームを開いていることです。 MSDN/Googleによると、ShowDialog()はモーダルフォームを開き、親フォームに戻る前に対話が必要です。 Show()でフォームを開いていたら、あなたのメソッドがうまくいくと思います。 –

0

私は一番上の(これはモーダルとして、フォームを示しており、私はそれを上書きする方法がわからない)ShowDialog()を示すときであることから、フォームを防止するための方法を発見していません。

form.Disposedのイベントを見て、Show()と表示されたときに、2番目の形式を監視する方法を見つけました。this StackOverflow questionです。 Ianから

Form2 form2 = null; 

void button_click(object sender, EventArgs e) 
{  
    if(form2 == null) 
    { 
     form2 = new Form2(); 
     form2.Disposed += new EventHandler(f_Disposed); 
     form2.Show(); 
    } 
} 

void f_Disposed(object sender, EventArgs e) 
{ 
    form2 = null; 
} 

私の知る限り、これはフォームが(DialogResultと同じように)閉鎖された理由を私は見ることができ、そうしないとイベントが発生しごと時間形式私の状況は大丈夫です。

0
paywindow.ShowDialog(this) 

が有効です。追加のパラメータは、親がどのようにしてそれが親の上にレイヤーを作成するかを示しますが、一番上にはありません。一番上にあるとは、別のウィンドウをアクティブにしても、ウィンドウがデスクトップに張り付くことを意味します。これは、ShowDialogのデフォルトの動作ではありません。JaredParが言及したように、フォーム/ウィンドウをTopMost = falseに設定して、trueにします。

関連する問題