[英]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.