0

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

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

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

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

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

4

1 回答 1

0

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

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

这是通过代码创建的示例……对我来说效果很好。

表格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());
            }
        }
    }
}
于 2013-05-21T03:51:31.710 回答