在c#

时间:2016-12-10 22:41:25

标签: c#

我有多个表单申请。表单1是用于用户验证的登录表单。 Form1转到Form2(菜单表单)。表单2导致Form3,它只是popupform并在打开时隐藏form2。表单3转到表单4.现在从Form4,单击按钮,我需要恢复Form2而不创建新实例。我尝试使用singelton方法,如上所述获取error.Code如下。

Form1中:

private void click_Click(object sender,EventArgs e)

{

if((user.Text == username)&&(pswd.Text == password))

{                 Form2 menu = new Form2();

            menu.Username = user.Text;
            //hides the form1
            this.Hide();      
            menu.ShowDialog();
        }
    }

窗体2:

私有静态Form2实例;

    public static Form2 Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Form2();
            }
            return instance;
        }
    }

private void button_Click(object sender,EventArgs e)         {

        //Hide the form2
        Hide();
        //Bring up your PopUp form
        using (Form3 form3 = new Form3())
            form3.ShowDialog();

    }

Form3:

private void button_Click(object sender,EventArgs e)

{
        Hide();
        Form4 form4 = new Form4();
        form4.Show();
    }

Form4:

private void button1_Click(object sender,EventArgs e)

{

        Form2 form2 = Form2.Instance;//error occured as

Mainmenu不包含Instance的引用,也没有扩展方法接受类型' Mainmenu'

类型的第一个参数
    }

基本上,我想要恢复被隐藏的Form2。任何帮助都将不胜感激!谢谢

1 个答案:

答案 0 :(得分:1)

如何跟踪Forms父母,以便您可以直接访问。 例如,在Form1中:

menu.Parent = this;
Hide();
menu.ShowDialog();

然后在Form2中调用Form3时:

using (Form3 f3 = new Form3())
{
    Hide();
    f3.Parent = this.Parent;
    f3.ShowDialog();
}

然后当你想处理Form3时:

this.Parent.Show();
this.Parent.Focus();
this.Dispose();

根据您的需要提供尽可能多的开放表格。如果您需要退回到上一个表单,请将父级'这个'而不是' this.Parent'