使用UserControl登录,然后在主窗体中启用menuStrip

时间:2013-05-18 12:43:56

标签: winforms user-controls splitcontainer

好的,这就是我想要做的。 我在C#桌面应用程序中有一个主表单,其中我有一个menuStrip和一个splitContainer。 在运行应用程序时,我正在加载一个名为' Login'的UserControl。隐藏menuStrip时到splitContainer.Panel2。 Login控件包含用户名,密码和登录按钮的字段。

http://i.stack.imgur.com/5jcnK.png

一旦经过身份验证(单击按钮),我想启用menuStrip并允许splitContainer.Panel2中的其他UserControl,同时隐藏Login控件。

http://i.stack.imgur.com/lwLvP.png

如何实现这一目标?我试图从Login控件启动一个事件,并以某种方式使它以Primary形式工作但无法实现。 这种方法是否值得尝试,或者我应该单独打开多个表单(我不想这样做!) 关于如何在splitContainer.Panel2中更改视图的任何更清晰的方法(除了将面板堆叠在一起之外,对我来说这将是一个设计噩梦),同时保持splitContainer.Panel1具有相同的内容。

1 个答案:

答案 0 :(得分:0)

你的尝试听起来应该有效。

您是在设计时还是通过代码添加Login控件?

这是一个通过代码创建它的例子......对我来说很好。

Form1中:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        menuStrip1.Visible = false;
        Login login = new Login();
        login.Authenticated += new EventHandler(login_Authenticated);
        splitContainer1.Panel2.Controls.Add(login);
    }

    void login_Authenticated(object sender, EventArgs e)
    {
        Login login = (Login)sender;
        // ... possibly extract some info from "login" ...

        menuStrip1.Visible = true;
        login.Dispose();
    }

}

登录UserControl:

public partial class Login : UserControl
{
    public Login()
    {
        InitializeComponent();
    }

    public event EventHandler Authenticated;   

    private void btnLogin_Click(object sender, EventArgs e)
    {
        if (true) // if they have authenticated
        {
            if (Authenticated != null) // only raise the event if we have subscribers
            {
                Authenticated(this, new EventArgs());
            }
        }
    }
}