c# - 在 Winforms 自定义 UserControl 上启用设计界面

标签 c# .net winforms user-controls custom-controls

我尝试在 C# 中创建一个自定义用户控件来处理添加到其中的其他控件。自定义控件由两个面板组成。我想要实现的是,如果在设计模式下将另一个控件拖动到我的用户控件(或在运行时以编程方式添加),我希望将该控件放置在其中一个面板上。

我尝试处理 OnControlAdded 事件,但没有成功...

最佳答案

Markus 写道:“如果在设计模式下将另一个控件拖到我的用户控件(或在运行时以编程方式添加),我希望将该控件放置在其中一个面板上。”

我将把上述内容解释为您希望设计时拖动的控件成为 UserControl 的两个内部面板之一的子控件:如果这种解释是错误的:请忽略以下内容:)

此外,为了避免混淆:当您观察到面板或其他“容器”控件在设计时放置在窗体上的 UserControl 实例中时,您是绝对正确的,不会“消耗”或“吞咽”正如您所期望的那样拖到控件上:事实上,您甚至无法单独选择它们:它们被添加到 UserControl 的 ControlCollection 中。

幸运的是,在设计时拖放情况下,您可以在 Henry Minute 的 CodeProject 上学习和使用一个很好的可靠代码示例:Designing Nested Controls :该文章将向您展示如何从 ParentControlDesigner 继承,以便在设计时作为 UserControl 的容器的子控件可以按照您想要的方式充当容器。

如果您希望在运行时使用您的控件(程序员)...假设他们没有源代码,因此它们作为“黑匣子”与您的 UserControl 交互,能够“看到”仅属性、方法、可用事件等,您已公开...以控制添加的控件的放置位置:您可以决定希望消费者如何访问面板。您可以通过 UserControl 的公共(public)属性“直接”将它们公开为对象,也可以仅公开用于为每个面板添加控件的公共(public)方法。

关于c# - 在 Winforms 自定义 UserControl 上启用设计界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2056703/

相关文章:

c# - (流利的)NHibernate table-per-hierarchy; Id 仅与鉴别器一起唯一

c# - C# 中的多态返回类型

c# - 禁止设置属性的属性

c# - 确保所有更新都成功完成?

c# - 按 Messagebox 上的帮助按钮时事件未触发

c# - 如何将占位符文本添加到 ToolStripTextBox?

c# - 为什么 MemoryCache 中的滑动过期行为如此奇怪?

c# - .net WebApi - HttpContext.Current.Server.MapPath 的错误值

c# - 我在 Windows 窗体中的跨线程调用有什么问题?

c# - 字符串返回字节数组 - 不工作