首页 文章

返回初始用户控件后返回null的表单

提问于
浏览
3

我是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窗体的新手,我正在学习,任何输入将非常感激 .

1 回答

  • 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);
    }
    

相关问题