1

我有一个基本的用户控件。我将 Ok 和 Cancel 按钮放在控件的右下方,并将它们锚定在底部和右侧。

然后我创建另一个从基本用户控件继承的用户控件。我调整继承控件的大小(例如增加高度或宽度)。将继承的控件扔到窗体上。跑。继承的控件不支持 Ok 和 Cancel 按钮的锚属性。

以下是复制的确切步骤。

1 - 创建一个新的winforms项目

2 - 创建一个基本控件 (BaseControl1),在底部/右侧有一个 Ok 和 Cancel 按钮。将它们固定在底部,对。编译应用程序。

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

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

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

我做错了什么,还是 VS2008 根本不尊重基本用户控件上控件的锚属性?

4

2 回答 2

4

将按钮上的Modifiers属性更改为Protected。然后,在完成第 4 步后,您会注意到 UserControl1 的设计器代码现在包含一行代码来设置按钮的位置。当您的按钮被限定为Friend时,这并没有发生。

我一直想知道为什么从工具箱中删除的控件默认情况下没有限定为私有

于 2009-01-14T22:48:14.503 回答
1

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

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

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

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

于 2009-01-14T17:03:57.773 回答