c# - 使子控件成为 IContainer

标签 c# vb.net winforms controls containers

我创建了一个继承 Panel 控件的控件类。然后该控件包含另外两个面板,其中一个我想成为 IContainerControl。

我知道如何将整个控件变成 IContainerControl,但无法对子控件执行同样的操作。我在 C# 和 VB.Net 中都尝试过,但都失败了。

这有意义吗?我尝试搜索但没有找到任何有用的东西,希望这里有人可以帮助我!

谢谢!

编辑

对不起,辛苦了一天...我正在使用 WinForms。

基本上我需要一个具有两个面板的自定义用户控件,一个显示一些统计数据,另一个包含控件。统计面板已完成并正常工作,但另一个面板可能包含 DataGridView、ListView 或 TreeView(无论用户在设计时添加哪个)。

是的,我已经实现了 ActiveControl 和 ActivateControl。

最佳答案

我认为你有两个策略:首先是“便宜的东西”:)

便宜货策略:

  1. 假设最终用户是一位拥有源代码的程序员,在 Visual Studio 或 Mono 中打开项目,能够创建用户控件,并且能够拖放他们选择的控件(例如 Treeview 或 ListView ,你提到)到“随便什么”。

    一个。创建两个用户控件

    UserControl1 包含两个面板的空间。

    在 UserControl1 的一侧插入一个面板,并根据规范进行设计。

    在 UserControl2 上:允许最终用户插入他们选择的控件:TreeView 等。

    构建两个用户控件

    将 UserControl2 的实例(来自工具箱图标)放置到 UserControl1 上,并根据需要放置它(Dock、Anchor 等)。

再次构建。现在您可以将 UserControl1 的实例放在 WinForm 上,它将包括两个面板。

成本/ yield :

  • 您可以按照标准方式编辑每个控件的外观和属性

  • 最终用户可以选择在 UserControl2 上使用哪个控件。

  • 您在这里对组件进行了更大程度的分离,从而可以更轻松地维护或扩展?

  • 谁来根据用户选择 TreeView 还是 ListView 来为 Control 继续 UserControl2 进行编程?

更昂贵的策略

您将需要从 'ParentControlDesigner 继承,使运行时放置的控件成为放置在另一个容器中的容器,接受设计时控件的拖放。

幸运的是,Henry Minute 在 CodeProject 上有一篇关于 C# 源代码的好文章:Designing Nested Controls强烈建议您阅读本文底部 Sacha Barber 的评论和 Henry Minute 的回答。

另见 SO:Adding design-time support for a nested container in a custom/usercontrol (Winforms).

无论采用哪种策略,您都需要做一些工作来启用访问(公开哪些属性,“引发”哪些事件以封闭容器等)。

关于c# - 使子控件成为 IContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215104/

相关文章:

c# - 在运行时修改 Databound ComboBox

c# - C# MongoDB Driver 按之前插入的方式获取数据顺序列表

c# - 使用 EPPlus 设置折线图使用的数据

c# - 无法写入输入以处理 C# Mono

c# - Intel 的开源 UPnP 库可以与 VB6 一起使用吗?

.net - vb.net多线程无法正常工作

c# - .NET Core 1.0 中的系统环境

c++ - 如何检测鼠标点击是合法的还是自动的?

vb.net - 如何防止datagridview vb.net中的空格

c# - 自定义组件点击事件