c#-表单返回初始用户控件后返回null

我是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);
}
上一篇:模块化C#Winform应用程序


下一篇:c#-Winforms:等待光标与信息文本