Csharp/C#教程:如何在winforms设计器中访问inheritance的控件分享


如何在winforms设计器中访问inheritance的控件

我正在制作一些控件,它们都必须共享相同的外观和一些常见的行为,尽管它们用于不同类型的输入。 所以我创建了一个从UserControlinheritance的BaseClass,我的所有控件都inheritance自BaseClass。

但是,如果我在设计器中添加BaseClass的控件,例如TableLayoutPanel,我在设计inheritance的类时无法访问它们。 我看到TableLayoutPanel,但即使他是“受保护的”,我也无法修改它或通过设计器将控件放入其中。 我通过代码访问它没有任何问题,但我不想失去使用设计器的能力。

现在,我只是从BaseClass中删除了所有控件,在每个inheritance的类中添加了布局和所有常用控件,然后使用引用在BaseClass中操作它们。 但这根本不能让我满意。 有没有办法让设计器使用inheritance的受保护成员控件?

环境:C#,.NET 3.5,Visual Studio 2008

编辑回答SLaks的建议。 我尝试设置一个属性,虽然我不习惯使用它,但它似乎不起作用。 这是我试过的代码:

public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } public TableLayoutPanel TableLayoutPanel1 { get { return tableLayoutPanel1;} set { tableLayoutPanel1 = value;} } } public partial class UserControl2 : UserControl1 { public UserControl2() { InitializeComponent(); } } 

当您尝试使用设计器从inheritance的控件访问基本控件中声明的TableLayoutPanel时,您将在WinForms中使用名为“Visual Inheritance”的function。

不幸的是,TableLayoutPanel不支持可视inheritance: http : //msdn.microsoft.com/en-us/library/ms171689%28VS.80%29.aspx

这就是为什么TableLayoutPanel在inheritance的控件中出现阻塞的原因。

尝试将此属性添加到面板的定义中(这可能有帮助也可能没有帮助):

 [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 

您必须自己设计基本控件。 成功重建控件项目后,更改将反映在设计器中。 如果您将成员公开,则可以编辑它们,但更改将不会保留。

尝试为您的控件创建ParentControlDesigner ,重写InternalControlDesigner ,并返回(designerHost.GetDesigner(tableLayoutPanel) as ControlDesigner)designerHost(IDesignerHost) component.Site.GetService(typeof(IDesignerHost))

我依稀记得通过将基类放在它自己的DLL并首先构建它来解决类似的问题。 我有翻找,但我找不到这个项目。 抱歉。

上述就是C#学习教程:如何在winforms设计器中访问inheritance的控件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1017134.html

(0)
上一篇 2022年1月1日
下一篇 2022年1月1日

精彩推荐