我如何去和来回两个单独的窗口窗体,而不创建新的实例form1

本文关键字:窗体 窗口 form1 实例 创建 单独 两个 何去 | 更新日期: 2023-09-27 18:08:17

我要做的是:

    我设置了两个windows窗体。我在form1和文本框中添加了一个按钮(以验证保存状态)
  1. 我继续在文本框
  2. 中输入胡言乱语现在当我点击form1中的按钮时,它会隐藏并显示form2
  3. 我必须回到form1现在通过单击form2中的按钮,我不能在form2中创建一个新对象,因为它会给我一个新的实例,文本框中的文本将丢失。

那么我如何在c#窗口窗体中实现来回移动并保持状态。

我如何去和来回两个单独的窗口窗体,而不创建新的实例form1

如果您只是调用form1.Hide(),则文本框中的数据将保留,直到再次显示它。这个问题与您隐藏表单的方式有关。

在您的Form2元素中这样声明:

public class Form2 
{
    private Form form1 = null; 
    public Form2(Form1 frm1) 
    {
        form1 = frm1;
    }   
}

所以你传递并保存Form1对象到Form2对象。当Form2完成后,可以使用Form1form1实例来显示。

您应该能够很好地做到这一点,只要您坚持表单对象本身。

换句话说,只是使用变量来保持对实际表单本身的引用,然后即使在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特性。