我有一个像这样设计的基本表单类 在底部我放了一个停靠底部面板,在这个面板内我放了两个按钮。我还将这些按钮的 Anchor 属性设置为“ Top, Right ” 我还设置了 Form 的 AutoScaleMode 为None
在我的应用程序中,我继承了这个基本表单,但我不知道发生了什么。我的按钮位于面板的中间。如果我再次将它设置到左侧并且可能重建我的 BaseForm 它会再次进入中间。
我有一个像这样设计的基本表单类 在底部我放了一个停靠底部面板,在这个面板内我放了两个按钮。我还将这些按钮的 Anchor 属性设置为“ Top, Right ” 我还设置了 Form 的 AutoScaleMode 为None
在我的应用程序中,我继承了这个基本表单,但我不知道发生了什么。我的按钮位于面板的中间。如果我再次将它设置到左侧并且可能重建我的 BaseForm 它会再次进入中间。
我已经看到当基本表单中的控件具有protected
修饰符时会发生这种情况。这意味着继承的表单可以设置控件的属性(如Location
)本身。但是为什么会这样,我不知道。
当 Winforms 变成老太太时,我不再与她的特质作斗争,只是试图解决它们(就像你对老太太所做的那样)。在您的情况下,我将使用 aFlowLayoutPanel
而不是常规Panel
并设置其FlowDirection = FlowDirection.RightToLeft
.
您是否尝试过检查以确保在 panel_resize 事件中没有任何手动重新定位按钮的代码?
在我继承的一些代码中,有很多这样的:
panel_resize(object sender, EventArgs e)
{
int buttonWidth = btnSubmit.Width + btnCancel.Width + 5; // 5 is buffer between
int leftOffset = (panel.Width - buttonWidth ) / 2 ;
btnSubmit.Left = leftOffset;
btnCancel.Left = btnSubmit.Right + 5; // Buffer
}
这在调整大小事件期间手动居中按钮(您可以以不同的方式执行此操作,但这就是他们所做的。)并且意味着设计时间看起来与实际运行时间不同。