我是Windows表单的新手,在处理所有用户控件时遇到问题.我有3个用户控件,当我单击接受按钮时,它将带我进入第二个屏幕(即用户控件2),但是当我在第二个屏幕上单击“取消”时,它将带我回到第一个屏幕(我加载了第一个现在再次出现问题是当我再次单击“接受”时,欢迎用户控件将返回null和错误.
私有void Viewer_Load(对象发送者,EventArgs e)
{
formPanel.Controls.Clear();
formPanel.Controls.Add(wel);
}
private void SwapControls(object sender, EventArgs e)
{
if (formPanel.Controls.Contains(wel))
{
formPanel.Controls.Remove(wel);
formPanel.Controls.Add(p);
}
else if (formPanel.Controls.Contains(pin) && IsAuthenticated)
{
formPanel.Controls.Remove(p);
formPanel.Controls.Add(m);
}
else if(formPanel.Controls.Contains(pin) && !Global.IsAuthenticated)
{
formPanel.Controls.Remove(p);
formPanel.Controls.Add(wel);
}
因此,第一次加载欢迎的用户控件,然后单击“接受”,然后清除用户控件并加载第二个“输入密码控件”,单击“取消”后,从该位置删除该用户控制并再次加载欢迎.但是现在,当我单击“接受”时,在欢迎用户控件的这一行中将得到一个空值
this.AddControl(this, new EventArgs());
再次,我是Windows窗体的新手,正在学习,任何输入将不胜感激.
解决方法:
由于要重用UserControl,因此不要从窗体中删除处理程序,因此请确保在完成使用UserControl时将其删除.
尝试这样的事情.
private void SwapControls(object sender, EventArgs e)
{
if (formPanel.Controls.Contains(wel))
{
formPanel.Controls.Remove(wel);
formPanel.Controls.Add(pin);
}
else if (formPanel.Controls.Contains(pin) && Global.Instance.IsAuthenticated)
{
formPanel.Controls.Remove(pin);
formPanel.Controls.Add(mmenu);
}
else
{
formPanel.Controls.Remove(pin);
formPanel.Controls.Add(wel);
}
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
wel.AddControl -= new EventHandler(SwapControls);
pin.AddControl -= new EventHandler(SwapControls);
pin.ReturnWelcome -= new EventHandler(SwapControls);
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}