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

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

<分区>

Visual Studio 2010 的新手,但 10 多年来一直使用其他平台进行 Windows 开发。我已经在其他平台如 Visual FoxPro 中完成了以下操作,但它似乎在 VS 中不起作用...

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

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

最佳答案

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

注意事项:

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

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

关于c# - Visual Studio - 可以将控件添加到设计器中基于面板的用户控件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150543/

相关文章:

c# - 使用 ValidationProperty 属性防止 UserControl 的完整回发

c# - 选择用户控件时如何禁用 ASP.NET 页面中的控件?

C# 对此对象的反射(reflection)

visual-studio-2010 - Visual Studio 2010 Pro - 以管理员身份运行,无需网络驱动器

visual-studio-2010 - 如何使用 Visual C++ 2010 Express 构建 Notepad++?

c++ - Visual Studio 2010 C++ 中的自定义项模板

WPF - 用户控件继承

c# - 从多个线程写入 TraceListener

c# - 在处理 SQLConnection 之前,我是否必须 Close() ?

C# 计算列表中的出现次数