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

Winforms 使用UserControl登录,然后在主窗体中启用menuStrip,winforms,user-controls,splitcontainer,Winforms,User Controls,Splitcontainer,好的,这就是我要做的。 我在C#桌面应用程序中有一个主窗体,其中有一个menuStrip和一个splitContainer。 在运行应用程序时,我正在将名为“Login”的UserControl加载到splitContainer.Panel2,同时隐藏menuStrip。登录控件包含用户名、密码和登录按钮字段 一旦通过身份验证(单击按钮),我想在splitContainer.Panel2中启用menuStrip并允许其他用户控件,同时隐藏登录控件 我如何做到这一点?我试图从登录控件触发一个事

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

一旦通过身份验证(单击按钮),我想在splitContainer.Panel2中启用menuStrip并允许其他用户控件,同时隐藏登录控件

我如何做到这一点?我试图从登录控件触发一个事件,并以某种方式使其在主窗体中工作,但无法实现。 这种方法值得尝试吗?还是应该单独打开多个表单(我不想这样做!)
关于如何更改splitContainer.Panel2中的视图(而不是将面板一个叠在另一个上,这对我来说将是一个设计噩梦),同时保持splitContainer.Panel1具有相同内容的任何更干净的方法。

您的尝试听起来应该是有效的

您是在设计时还是通过代码添加登录控件

这里有一个通过代码创建的示例…对我来说效果很好

表格1:

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();
    }

}
登录用户控件:

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());
            }
        }
    }
}

一个活动会很完美。表单将订阅UserControl事件,然后适当地切换控件。“活动法”有什么困难吗?@Idle\u Mind谢谢你的建议。IDK,事件不起作用。也许我做得不对,因为我参考了一些教程。在我声明的登录控制类中:public委托void EventHandler(objectsender,EventArgs e);已验证的公共事件事件处理程序;在登录按钮上,单击:如果用户已通过db i do:1的身份验证。已验证(这是新的System.EventArgs());或2。本。已认证(本,e);在我尝试执行的主要表单类上:Login.EventHandler=neweventhandler(Authenticated);因为它应该根据教程工作而感到困惑。