【问题标题】:Visual Studio - Can controls be added to a panel-based user control in the designer? [duplicate]Visual Studio - 可以将控件添加到设计器中基于面板的用户控件吗? [复制]
【发布时间】:2014-01-16 08:05:56
【问题描述】:

Visual Studio 2010 的新手,但使用其他平台进行 Windows 开发已有 10 多年了。我在Visual FoxPro等其他平台做了以下,但是在VS中好像不行……

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

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

【问题讨论】:

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


    【解决方案1】:

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

    注意事项:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我从未尝试过,但您可以创建一个面板并将自定义控件放在其上。然后你可以在面板中添加任何你想要的东西。
      • 这可能是我的终极解决方案。显然,用户控件不起作用,并且子类化面板听起来很麻烦。谢谢!
      猜你喜欢
      • 2019-02-02
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2012-08-03
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多