2014-05-22 69 views
-1

我有第一個表單,用戶爲他/她自己設計一個酒店。在從創建的樓層中點擊創建的房間後,用戶將信息引入到從第一個窗體打開的第二窗體以預留該房間。當單擊第二個窗體上的按鈕時,窗體應該消失,將數據發送到第一個窗體,然後將其保存到第一個窗體的文件中。如何返回到以前的表單,不會丟失數據

我的問題是,當我試圖隱藏或關閉第二個窗體時,它要麼退出應用程序,要麼隱藏該窗體。

任何人都可以告訴我如何關閉第二個窗體,返回到第一個窗體而不會丟失組合框中的任何數據,任何按鈕,任何文本或任何信息示例。

代碼明智的,這就是我必須在Program.cs中:

static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      Form1 myStart = new Form1(); 

      if (myStart.ShowDialog() == DialogResult.OK) 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Application.Run(new Form1()); 
      } 
      else 
      { 
       Application.Exit(); 
      } 
     } 

而這正是我試圖把在關閉第二種形式的按鈕,但它不工作:

Form2Reservations f2 = new Form2Reservations(); 
      f2.Close(); 

,我也試過:

var main = new Form1(); 
      main.Show(); 
      main.BringToFront(); , but it gives me a new Form1 and I do not want to lose everything that I already had in Form1. 

,我也試過this.Close();this.Hide();,但第一個關閉了整個應用程序,第二個只是將兩個選項卡放在工具欄上。

另外,我是C#的初學者,我沒有參加任何大學水平的課程,我只是在互聯網和教程的幫助下自學。

謝謝。

第二個編輯: 當我打開我的第二種形式我在表格1使用此代碼:

Form2Reservations f2 = new Form2Reservations(); 
       f2.receiveDataFromForm1(typeOfRoom, numberOfTheRoom, floor); 
       f2.ShowDialog(); 
       this.Hide(); 

編輯的changeRoom_Click看起來是這樣的:

private void changeRoomButton_Click(object sender, EventArgs e) 
     { 
      this.DialogResult = System.Windows.Forms.DialogResult.OK; 
      this.Close(); 
     } 

而且Program.cs中的代碼與靜態無效Main()仍然看起來相同。

我的想法如下:是否有任何機會,我沒有正確打開第二個窗體,所以當我想關閉第二個窗體時,它關閉了它們,因爲它們緊密連接,並且this.Close()是指兩種形式?那可能嗎 ?當我打開第二個表格時,我的錯誤是否會以第一種方式出現?

+3

你爲什麼要在按鈕中創建一個新的Form2Reservations來關閉表單?這就是你應該使用this.Close()的地方。假設按鈕關閉第二種形式是第二種形式的一部分,而不是主要形式。如果你想使用舊的數據,你不應該創建一個新的表單。你只需要關閉第二個表格,如果你從未關閉過「主」表格,它仍然應該打開。 –

+0

@Savanna可能這不是一個很好的方法來嘗試關閉它,但我已經試過這個.Close(),它關閉了我的兩個表單,而不僅僅是第二個 –

+0

你在哪裏放置按鈕/代碼按鈕關閉?在Form1或Form2Reservations中?如果它在form1中,它將關閉整個事物,如果它在form2reservations中,它應該只關閉該窗口。這是當你使用它時,「這個」是指什麼的問題。 –

回答

3

您正在檢查DialogResult是否設置爲'OK'。但是,在關閉表單之前,您沒有設置DialogResult,這就是爲什麼它會在If語句上返回False並退出應用程序。

您需要添加 this.DialogResult = System.Windows.Forms.DialogResult.OK; 在關閉窗體changeRoomButton_Click之前。

- EDIT:

讓我們再試一次。

在實際顯示錶單之前,您正在調用receiveDataFromForm1,因此它可能不會返回任何內容。此外,您在撥打ShowDialog時不需要隱藏現有表格,因爲它會保持在最前面,直到您關閉它。

你的代碼是一個真正的混亂,所以我只會拋出一些東西作爲一個例子來幫助你進步;

Program.cs

 frmReservations reservations = new frmReservations(); 
     if (reservations.ShowDialog() == DialogResult.OK) 
     { 
      string result = reservations.yourDesiredResult; 
      Application.Run(new frmMain(result)); 
     } 
     else 
     { 
      Application.Exit(); 
     } 

現在,裏面frmReservations

public partial class frmReservations : Form 
{ 
    public string yourDesiredResult = string.Empty; 
    private void btnClose_Click(object sender, EventArgs e) 
    { 
     this.DialogResult = System.Windows.Forms.DialogResult.OK; 
     this.yourDesiredResult = "I've been set!"; 
     this.Close(); 
    } 
} 

現在裏面frmMain,你將不得不再次收到我們從frmReservations接收而設定在Program.cs該值:

public partial class frmMain : Form 
{ 
     public frmMain(string resultFromReservations) 
     { 
      InitializeComponent(); 
      //resultFromReservations holds the string: I've been set 
     } 
} 

這只是一個示例,向您展示了執行此操作的多種方法之一,您現在必須在程序中實現它。

+0

謝謝。我會馬上嘗試。 –

+0

@荷蘭男人我剛剛嘗試過,仍然無法正常工作。雖然我可能有問題的線索。我將編輯我的問題,並提供如何打開第二個表單的代碼。 –

+0

已編輯的問題。 –

0

我發現了我的錯誤。這是在Program.cs中: 我:

static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      Form1 myStart = new Form1(); 
      Form2Reservations myLogin = new Form2Reservations(); 

      if (myStart.ShowDialog() == DialogResult.OK) 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Application.Run(myLogin); 
      } 
      else 
      { 
       Application.Exit(); // here was the mistake 
      } 
     } 

所有我必須做的是改變Application.Exit();Application.Run(myStart); ,但我也需要包括在我的第二個表單按鈕此行關閉第二種形式:

this.DialogResult = System.Windows.Forms.DialogResult.OK; 

謝謝你們的幫助。沒有你的幫助,我無法修復它。