按下c#win表单后,动态加载的用户控件消失

时间:2018-04-29 14:15:35

标签: c# winforms

我正在尝试将用户控件的实例动态加载到我的主窗体上,并且它在程序加载时大部分工作但在相应的按钮加载后按下该用户控件两次都没有工作。

我使用以下代码创建用户控件的实例

public partial class patientInfo : UserControl
{
    public static patientInfo _instance;
    public static patientInfo Instance
    {
        get
        {
            if (_instance == null)
                _instance = new patientInfo();
            return _instance;
        }
    }
}

以及用于在MainForm上加载实例的代码

 private void pInfo_Click(object sender, EventArgs e)
    {
        //Patient Info
        foreach (Control ctrl in panel3.Controls)
        {
            ctrl.Dispose();
        }
        if (!panel3.Controls.Contains(patientInfo.Instance))
        {
            panel3.Controls.Add(patientInfo.Instance);
            patientInfo.Instance.Dock = DockStyle.Fill;
            patientInfo.Instance.BringToFront();

        }
        else
        {
            patientInfo.Instance.BringToFront();

        }
    }

如果我按下此按钮,一旦用户控制按照它应该的方式加载,但我再次按下它,用户控制将消失。我正在使用Dispose,因为我想在不同的鼠标按钮上加载和卸载多个用户控件。 请指教,谢谢。

1 个答案:

答案 0 :(得分:0)

执行对象的dispose方法会释放非托管资源,但不会从表单中删除控件。除了在使用资源时处理资源,您还需要使用控件的remove方法将其从表单中删除。见S.O.回答:How to programmatically remove Form controls

另请参阅Microsoft示例:Control.ControlCollection.Remove Method (Control)。示例中的代码:

// Remove the RadioButton control if it exists.
private void removeButton_Click(object sender, System.EventArgs e)
{
   if(panel1.Controls.Contains(removeButton))
   {
      panel1.Controls.Remove(removeButton);
   }
}