Visual Studio - 可以将控件添加到设计器中基于面板的用户控件吗?

时间:2014-01-15 23:34:17

标签: c# visual-studio-2010 user-controls

Visual Studio 2010新手,但已使用其他平台进行Windows开发超过10年。我在其他平台上完成了以下操作,例如Visual FoxPro,但它似乎不适用于VS ...

我创建了一个用户控件,其中包含一个包含几个标签和几个按钮的面板。当我创建一个新表单(WinForm)并将此用户控件放到表单上时,我无法向该面板添加其他控件。用户控件在文档大纲中显示为单个项目(紫色齿轮图标),无法访问面板或面板中包含的控件。

这是否是对用户控件的不当使用?在这个应用程序中,我将有许多面板,其中包含相同的按钮和标签以及其他控件的独特组合。使用户控件提供面板并包含常用的控件似乎很自然,然后只需插入设计器中面板的各种实例所独有的控件。如果我必须从基本控件构建设计器中的所有面板,我会,但我希望使用看似明显的OOP过程。

2 个答案:

答案 0 :(得分:1)

如果您不是从UserControl继承而是从Panel继承您的控件仍然是一个Panel,您可以在其上添加子控件。

注意事项:

1)控件本身添加的子控件被许多Panel方法和getter视为子控件(它们不会自动隐藏)。我从没试过这个。但是从子类化表单中继承Form和派生用户表单可以正常工作。并且WinForms Designer优雅地将继承的子元素显示为不可修改的元素。

2)在Panel派生类中,首选覆盖OnXxx()方法对Panel事件执行内部操作,而不是将处理程序附加到Xxx事件:这将允许您通过放置它来决定是否应在附加处理程序之前或之后执行代码在调用base.OnXxx(发件人,e)之前或之后;

答案 1 :(得分:0)

虽然您正在创建的用户控件本身包含一个Panel,但在您的应用程序中,它在技术上不再是Panel。它在技术上是一种新的控制。

也许您应该构建一个足够动态的控件,其中所有面板和控件都在同一个自定义用户控件上,但会根据需要动态显示和隐藏它们。