Visual Inheritance是否适用于VS2008中的用户控件

时间:2009-01-14 16:56:02

标签: winforms visual-studio-2008 inheritance visual-inheritance

我有一个基本用户控件。我在控件的右下角放置了Ok和Cancel按钮,并将它们固定在Bottom和Right。

然后我创建另一个继承自基本用户控件的用户控件。我调整了继承控件的大小(例如增加高度或宽度)。将继承的控件抛到表单上。跑。继承的控件不支持“确定”和“取消”按钮的锚属性。

以下是重新制作的确切步骤。

1 - 创建一个新的winforms项目

2 - 使用位于底部/右侧的“确定”和“取消”按钮创建一个基本控件(BaseControl1)。将它们固定在Bottom,Right。编译应用程序。

3 - 创建一个新的用户控件(UserControl1),它继承自在步骤1中创建的基本控件(BaseControl1)。

4 - 增加(在设计器中)UserControl1的高度或宽度。

5 - 将UserControl1扔到Form1上。跑。你会看到Ok和Cancel按钮不在它们应该的位置。

我做错了什么,或者VS2008根本不遵守基本用户控件上控件的锚属性?

2 个答案:

答案 0 :(得分:4)

将按钮上的修改器属性更改为受保护的。然后,在完成步骤4之后,您会注意到UserControl1的设计器代码现在包含一行代码来设置按钮的位置。当按钮的范围为朋友时,情况就不会发生了。

我一直想知道为什么默认情况下从工具箱中删除的控件的范围不是私有

答案 1 :(得分:1)

我认为您的问题是Anchor属性的默认值不会被锚定。当您更改属性并进行编译时,这并不意味着这是继承您控件的类的默认设置。

如果使用属性选择器,Visual Studio会自动在应用程序中放入一些代码来更改这些值(即设计器代码)。找到InitializeComponent()方法,我打赌你会看到一些效果:

this.myOKButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
this.myCancelButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

您需要在类中的某个位置设置此属性,例如构造函数,或者覆盖该属性并指定您希望它锚定的方式。