2013-02-27 57 views
0

首先,我是C#和編程的新手。我已經非常徹底地搜索了,但是我只能找到有人想要打開另一個表單並隱藏按鈕被按下的表單的實例。當一個關閉時打開以前的表格

在這種情況下,當我在主Form1以外的任何窗體上按(X)時,我的程序一直處於運行狀態。窗體到窗體的導航工作正常。即:單擊一個按鈕隱藏主窗口並打開適當的表單,並且該表單上的「後退」按鈕將自己隱藏起來,並顯示前一個「主」形式的表單(我猜是另一個實例)。 - 我也可以使用一些指導。大聲笑

我不介意如果它關閉了整個應用程序,如果X被按下,但我需要有「X」出現在所有窗口和所有窗口需要退出整個應用程序,如果X按下。有什麼建議麼?

由於提前,

代碼:

Form1中:

public partial class Form1 : Form 
     { 
      public Form1() 
      { 
       InitializeComponent(); 
      } 
      public void btnTransaction_Click(object sender, EventArgs e) 
      { 
       Transaction transactionForm = new Transaction(); 
       Form mainForm = this; 
       transactionForm.Show(); 
       mainForm.Hide(); 
      } 
     } 

交易形式:

public partial class Transaction : Form 
     { 
      public Transaction() 
      { 
       InitializeComponent(); 
      } 
      private void button4_Click(object sender, EventArgs e) 
      { 
       Form1 mainForm = new Form1(); //not sure if I'm doing this right.. 
       this.Hide();     //I don't know how to "reuse" the original Form1 
       mainForm.Show(); 
      } 
     } 
+0

開盤後'Form1'做u有什麼用''交易形式? – 2013-02-27 23:21:08

+0

頁面流是否被擴散到不同的窗體,或者你是否可以重新設計你的應用程序,並在tabControl或單個面板(只需管理可見性)內使用userControls(與沒有窗口周圍的窗體相同的行爲)? – Michael 2013-02-27 23:21:44

+0

感謝所有幫助傢伙!這個論壇非常有幫助!現在我明白爲什麼規劃階段如此重要:) – user2117486 2013-02-28 15:51:53

回答

1

我建議你爲此創建一個MDI容器。將MenuStrip從ToolBox拖放到Form1,然後在MenuStrip中創建一個ToolStripMenuItem「form2」。 現在你可以打電話給你的窗口2在Form1這樣

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      IsMdiContainer = true; 
     } 
     Form2 frm2; 
     public void CreateMdiChild<T>(ref T t) where T : Form, new() 
     { 
      if (t == null || t.IsDisposed) 
      { 
       t = new T(); 
       t.MdiParent = this; 
       t.Show(); 
      } 
      else 
      { 
       if (t.WindowState == FormWindowState.Minimized) 
       { 
        t.WindowState = FormWindowState.Normal; 
       } 
       else 
       { 
        t.Activate(); 
       } 
      } 
     } 
     private void form2ToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      CreateMdiChild<Form2>(ref frm2); 
     } 
    } 

如果通過單擊ToolStripMenuItem你開除ToolStripmenuItem事件,它將在Form1窗體2顯示作爲子即MDI容器和將被關閉,當您關閉Form1。

+0

這就是我一直在尋找的東西。不幸的是,我想我將不得不徹底重新開始,因爲我的代碼已經包含了很多其他的語句和函數,我沒有在這篇文章中提到將會因爲自動生成的亂碼而破壞,我還不太明白。 – user2117486 2013-02-28 15:50:59

+0

我不知道什麼時候有人接受答案,但沒有贊成,就像你一樣。 – kashif 2013-02-28 18:14:53

0
public partial class Transaction : Form 
    { 
     Form1 _mainForm; 

     public Transaction(Form1 mainForm) 
     { 
      InitializeComponent(); 
      _mainForm = mainForm; 
     } 
     private void button4_Click(object sender, EventArgs e) 
     { 
      this.Close(); //since you always create a new one in Form1 
      _mainForm.Show(); 
     } 
    } 
0

你可以使用Form.ShowDialog()

當這個方法被調用時,下面的代碼('ShowDialog()'下面的代碼)直到關閉對話框之後纔會執行。

private void button4_Click(object sender, EventArgs e) 
{ 
    Form1 mainForm = new Form1(); 
    this.Hide();     
    mainForm.ShowDialog(); 
    this.Show(); 
} 
0

你可以使用ShowDialog()方法,將要求用戶返回到先前的形式與之前的新形式互動。例如,你可以試試這個:

public void btnTransaction_Click(object sender, EventArgs e) 
{ 
    using (var transactionForm = new Transaction()) 
    { 
     this.Hide(); 
     if (transactionForm.ShowDialog() == DialogResult.OK) 
     { 
      this.Show(); 
     } 
    } 
} 

DialogResult是你可以在TransactionForm設置像這樣:

private void button4_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.OK; 
    this.Close(); 
} 

這迫使新形式互動的一個非常標準的方式。

0
protected override void OnClosing(CancelEventArgs e) 
{ 
    this.Hide(); 
    menu menu = new menu("administrator"); 
    menu.ShowDialog(); 
    this.Close(); 
} 

//編碼快樂

相關問題