我是Windows窗体的新手,在处理所有用户控件时遇到问题。我有3个用户控件,当我单击一个接受按钮时,它将我带到第二个屏幕(这是用户控件2)但是当我在第二个屏幕上单击取消时它将我带回第一个屏幕(我加载第一个屏幕)用户控制再次)现在的问题是当我再次点击“接受”时,欢迎用户控件返回null和错误。
private void Viewer_Load(object sender,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);
}
所以第一次加载欢迎用户控件,然后点击“接受”,它清除用户控件并加载第二个“输入引脚控制”,当我点击“取消”我删除该用户控件并再次加载欢迎。但是现在,当我单击Accept时,我在欢迎用户控件
中的这行中得到一个null this.AddControl(this, new EventArgs());
同样,我是Windows窗体的新手,我正在学习,任何输入都会非常感激。
答案 0 :(得分:3)
由于您正在重复使用UserControls
,因此当您从Form
移除处理程序时,请不要删除处理程序,因此请确保在使用完UserControls
后将其删除。
尝试这样的事情。
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);
}