2011-03-29 59 views
0

下面是我的表單是如何 - Form1是第一種形式。從Form1我通過使用showdialog方法移動到Form2(Form1位於後臺,Form2位於頂部)。現在單擊Form2上的一個按鈕,將顯示一個messagebox(請注意,Form1仍處於後臺)。 Messagebox只有確定按鈕。現在,當我按OK我想加載Form3並想要關閉Form2和Form1。我怎樣才能關閉Form2和Form1?我在窗體2使用此代碼:從消息框中關閉所需的表單! (c#)

private void button1_Click(object sender, EventArgs e) 
    { 
     if (...) 
     { 
       MessageBox.Show("hello"); 
       this.DialogResult = DialogResult.OK; 
       this.Close(); 
       Form3 frm = new Form3(); 
       frm.ShowDialog(); 
     } 
    } 

此方法不會關閉窗體2和Form1上,但Form3的表現。所以我在Form2中試過這個:

private void button1_Click(object sender, EventArgs e) 
    { 
     if (...) 
     { 
      if (MessageBox.Show("hello") == DialogResult.OK) 
      { 
       this.Close(); 
       Form3 frm = new Form3(); 
       frm.ShowDialog(); 
      } 
     } 
    } 

這兩個表格還沒有關閉。我嘗試在MessageBox.Show下調用公共關閉方法(Form1和Form2中的this.Close)在Form1和Form2中從Form2中創建。仍然沒有工作。如何擺脫這兩種形式與消息框的確定按鈕?

謝謝。簡單但棘手..請留下代碼片段。我不明白的技術術語不幸:-(

+0

看起來您應該只在所有其他代碼執行後關閉表單。也許試試看,並在你的條件塊的末尾調用'this.Close()'。 – 2011-03-29 13:09:44

回答

1

你需要知道你想要關閉的情況下(在這種情況下的形式)。

在窗體2,你可以創建一個變量(例如theOneForm)來存儲。參考到Form1中和創建Form1中後把它(甚至在Form1的構造函數)

// in Form2 
public Form1 theOneForm {get; set;} 

// in Form1 
Form2 frm = new Form2(); 
frm.theOneForm = &this; // correct me if I'm wrong here... 

然後從你的button1_Click,請撥打theOneForm.Close() - 這應該關閉Form1中

private void button1_Click(object sender, EventArgs e) 
{ 
    if (...) 
    { 
     if (MessageBox.Show("hello") == DialogResult.OK) 
     { 
      Form3 frm = new Form3(); 
      frm.ShowDialog(); 
      theOneForm.Close(); 
      this.Close(); 
     } 
    } 
} 

另外,關閉您的表格您執行了其他代碼。

+0

謝謝。讓我嘗試.. :) – nawfal 2011-03-29 13:26:10