簡體   English   中英

如何在不丟失數據的情況下返回上一個表格

[英]How to go back to the previous form with no loss of data

我有一個第一種形式,用戶可以自己設計一個旅館。 在從創建的樓層上單擊創建的房間之后,用戶將信息引入第二個表單,該表單從第一個表單打開以保留該房間。 當單擊第二個表單上的按鈕時,該表單應該消失,將數據發送到第一個表單,然后將其保存到第一個表單中的文件中。

我的問題是,當我嘗試隱藏或關閉第二個表單時,它要么退出應用程序,要么只是隱藏選項卡。

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

我在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();
        }

帶有靜態void Main()的Program.cs代碼看起來仍然相同。

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

您正在檢查DialogResult是否設置為“ OK”。 但是,您沒有在關閉表單之前設置DialogResult,這就是為什么它將在If語句上返回False並退出應用程序的原因。

您需要添加this.DialogResult = System.Windows.Forms.DialogResult.OK; changeRoomButton_Click關閉表單changeRoomButton_Click

- 編輯:

讓我們再試一次。

在實際顯示表單之前,您正在調用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
      }
}

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

我發現了我的錯誤。 它在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;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM