繁体   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