好的,这就是我想要做的。 我在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具有相同的内容。
答案 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());
}
}
}
}