2017-05-23 13 views
-1

他のボタンをクリックするとmdiparentでウィンドウフォームを閉じようとしますが、結果は別のボタンをクリックしても新しいウィンドウの後ろから表示されます。どうやってこれを処理できますか?クリックすると前のウィンドウのフォームを閉じます

private void btn_ic_Click(object sender, EventArgs e) 
{ 

    pictureBox3.Visible = false; 
    SelectIC ss = new SelectIC(); 
    ss.MdiParent = this; 
    ss.Show(); 
    Detail aa = new Detail(); 
    aa.MdiParent = this; 
    aa.Close(); 
    btn_ic.Enabled = false; 
    btn_cat.Enabled = true; 

} 


private void btn_cat_Click(object sender, EventArgs e) 
{ 
    pictureBox3.Visible = false; 
    Detail aa = new Detail(); 
    aa.MdiParent = this; 
    aa.Show(); 
    SelectIC ss = new SelectIC(); 
    ss.MdiParent = this; 
    ss.Close(); 
    btn_cat.Enabled = false; 
    btn_ic.Enabled = true; 
} 
+1

'new Detail()'はあなたに既存のウィンドウを与えません - 新しいウィンドウを作成します。以前に作成したウィンドウに影響を与えたい場合は、そのウィンドウへの参照を保持し、そのウィンドウと対話する必要があります。 – Luaan

答えて

0

フォームの新しいインスタンスを作成して閉じています。そうすれば、既存のウィンドウを閉じずに新しい(不可視な)ウィンドウを作成して閉じることができます。既存のウィンドウがMdiChildrenのコレクションに含まれていることを確認してから閉じてください。このようなもの:

private void btn_ic_Click(object sender, EventArgs e) 
{ 

    pictureBox3.Visible = false; 
    SelectIC ss = new SelectIC(); 
    ss.MdiParent = this; 
    ss.Show(); 

    var detailForm = this.MdiChildren.FirstOrDefault(f => f.GetType() == typeof(Detail)); 
    detailForm?.Close(); 

    btn_ic.Enabled = false; 
    btn_cat.Enabled = true; 

} 

private void btn_cat_Click(object sender, EventArgs e) 
{ 
    pictureBox3.Visible = false; 
    Detail aa = new Detail(); 
    aa.MdiParent = this; 
    aa.Show(); 

    var selectForm = this.MdiChildren.FirstOrDefault(f => f.GetType() == typeof(SelectIC)); 
    selectForm?.Close(); 

    btn_cat.Enabled = false; 
    btn_ic.Enabled = true; 
} 
+0

申し訳ありません。上記のコードを実行すると、エラーメッセージが表示されます。 "オブジェクト参照がオブジェクトのインスタンスに設定されていません。" –

+0

@ashrafibrahim私は自分のコードを編集しました。 – Nino

+0

大丈夫です。コードが今動作しています..ありがとうございます.. –

関連する問題