c# - 在 C# 中动态创建的用户控件

标签 c# .net winforms dynamic-controls

我在 C# winforms 项目中工作,我有一个用户控件,它会在从工具条菜单中选择时加载。我有一个字典查找设置为在用户控件的其他功能的表单加载时发生。此外,当我关闭用户控件时,我只是在使用“.Hide();”方法。我注意到,当我第一次加载用户控件时,一切都很好,但是当我关闭它并选择第二次打开它时,它会创建一个新的对象实例,从而放弃我的字典查找。因此,我写了一些代码试图解决这个问题。

我需要做的是以某种方式说明,如果用户控件的实例已经存在,则不要创建该对象的新实例。相反,只需使用户控件再次可见。因此,我编写了代码以试图实现此目的。当我第一次选择该项目时,一切都很好。当我隐藏用户控件并尝试再次打开它时,没有任何反应。

以下是我为此目的编写的代码,它发生在从工具条菜单中选择项目时:

      if (Controls.ContainsKey("CheckAvailUserControl"))
       {
           Controls["CheckAvailUserControl"].Dock = DockStyle.Fill;
           Controls["CheckAvailUserControl"].Visible = true;
           Controls["CheckAvailUserControl"].Show();
           Controls["CheckAvailUserControl"].Refresh();
       }

       else
       {
          UserControl checkAvailUserControlLoad = new CheckAvailUserControl();
          Controls.Add(checkAvailUserControlLoad);
          checkAvailUserControlLoad.Dock = DockStyle.Fill;
          checkAvailUserControlLoad.Visible = true;
          checkAvailUserControlLoad.Show();
       }

当我在调试器中跟踪我的代码时,它实际上命中了上述 if/else 语句的正确部分。它只是在我第二次尝试加载它时没有在屏幕上显示用户控件。

问题是:如何让用户控件在关闭后正确加载,然后再次从工具条菜单中选择它?

最佳答案

我认为 Controls.ContainsKey(...) 总是返回 false,因为您在创建控件时从未为其指定名称。

如果,当你创建控件时,你说

//...
checkAvailUserControlLoad.Name = "Something"
//...
Controls.Add(checkAvailUserControlLoad);

然后

Controls.ContainsKey("Something") 

将返回 true,您将能够通过使用 Controls["Something"]

重新使用该控件

关于c# - 在 C# 中动态创建的用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578954/

相关文章:

.net - ASP.NET MVC : OutputCache and http headers

c# - 如何使用 iTextSharp 为页面添加边框?

c# - 放大显示时图表不缩放

c# - 从 SessionFactory 获取 ConnectionProvider

java - 匹配具有不同顺序和数字格式的嵌套元素

C# tcp socket客户端从服务器下载文件

c# - Task.Delay 值得取消吗?

c# - 强制触发 `Click` 事件 - 使用反射?

c# - 如何将通用日期字符串转换为本地时间

c# - 不允许请求的注册表访问 #2