gpt4 book ai didi

c# - 使子控件成为 IContainer

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:36 26 4
gpt4 key购买 nike

我创建了一个继承 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com