我如何去和来回两个单独的窗口窗体,而不创建新的实例form1
本文关键字:窗体 窗口 form1 实例 创建 单独 两个 何去 | 更新日期: 2023-09-27 18:08:17
我要做的是:
- 我设置了两个windows窗体。我在form1和文本框中添加了一个按钮(以验证保存状态)
- 我继续在文本框 中输入胡言乱语现在当我点击form1中的按钮时,它会隐藏并显示form2
- 我必须回到form1现在通过单击form2中的按钮,我不能在form2中创建一个新对象,因为它会给我一个新的实例,文本框中的文本将丢失。
那么我如何在c#窗口窗体中实现来回移动并保持状态。
如果您只是调用form1.Hide(),则文本框中的数据将保留,直到再次显示它。这个问题与您隐藏表单的方式有关。
在您的Form2
元素中这样声明:
public class Form2
{
private Form form1 = null;
public Form2(Form1 frm1)
{
form1 = frm1;
}
}
所以你传递并保存Form1
对象到Form2
对象。当Form2
完成后,可以使用Form1
的form1
实例来显示。
您应该能够很好地做到这一点,只要您坚持表单对象本身。
换句话说,只是使用变量来保持对实际表单本身的引用,然后即使在ShowDialog返回之后也保持它们(假设您希望以模式显示这些)。
private SampleForm m_oSamp1;
private SampleForm m_oSamp2;
private void SampleParentFunction()
{
if (m_bShowForm1)
{
m_oSamp1.ShowDialog();
m_bShowForm1 = false;
}
else
{
m_oSamp2.ShowDialog();
m_bShowForm1 = true;
}
}
单个表单中的数据是100%独立的,如果你这样做的话。
In form1:在课堂上:
Form2 frm2=new Form2();
和按钮:
private void button1_Click(object sender, EventArgs e)
{
Hide();
frm2.ShowDialog();
Show();
}
在form2中,按钮:
private void button1_Click(object sender, EventArgs e)
{
Hide();
}
您描述的情况涉及到使用Binding
和使用MVC
设计模式将模型(数据)从视图中分离。
我建议你阅读模式MVC
和WinForms的Binding
特性。