【发布时间】:2010-11-05 23:44:41
【问题描述】:
我正在制作一些控件,它们都必须具有相同的外观和一些共同的行为,尽管它们适用于不同类型的输入。所以我做了一个继承自UserControl的BaseClass,我所有的控件都继承自BaseClass。
但是,如果我在设计器中为 BaseClass 添加控件,例如 TableLayoutPanel,我在设计继承的类时无法访问它们。我看到了 TableLayoutPanel,但即使他受到“保护”,我也无法通过设计器对其进行修改或将控件放入其中。我可以通过代码访问它,但我不想失去使用设计器的能力。
现在,我只是从 BaseClass 中删除了所有控件,在每个继承的类中添加了布局和所有公共控件,然后在 BaseClass 中使用引用来操作它们。但这根本不能满足我。有没有办法让设计器使用继承的受保护成员控件?
环境: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();
}
}
【问题讨论】:
-
你能继承 TableLayoutPanel 本身吗?
-
当然,您始终可以创建自己的控件,继承自 winforms 控件。我这样做是为了实现一些控制。但这不是我想要在这里实现的。我试图拥有一个内部包含几个基本控件的控件:一个 tablelayoutpanel,其中包含一些控件(例如标签),以及继承类应该用他们选择的控件填充的几个空白空间。最终目标是将所有这些控件添加到工具箱中,然后将它们拖放到设计器中,以创建具有许多控件但这些控件具有共同行为/布局的表单。
-
顺便说一句,从 Winform 控件继承会削减设计器,因为通常,重点只是实现特定行为,而不是自己重新设计控件。
标签: c# winforms visual-studio-2008