[英]C# CenterToScreen() Winforms Designer Screen Position
我有一个项目,该项目具有从基本表单(称为frmBase)继承属性的表单。 我遇到了一个让我很困惑的问题:
我希望程序位于用户屏幕的中心,所以我添加了
this.CenterToScreen();
到frmBase_Load()。 当我运行应用程序BUT时,这种方法非常有用,但是当我尝试设计从frmBase继承的任何窗体时,它们都移到了设计器屏幕的右下角,我必须使用滚动条才能看到它们。
如果我移动
this.CenterToScreen();
到frmBase()代码时,该应用在运行时默认为屏幕的左上角,但设计者会为我正确显示该表单。 知道发生了什么吗? 我进行了搜索,但似乎找不到类似的问题,尽管我知道我不可能成为这种情况的第一人。 。 。 。 。
正如Hans和Reza所指出的,Visual Studio表单设计器正在实例化您的基类,因此构造函数中的代码及其Load事件也将运行。 有关设计器的解析行为的详细说明,请参见此好答案。 使用属性DesignMode
可以阻止执行代码或进行区分。 以下代码示例演示了其用法:
当在DesignMode中时,基本窗体将背景色设置为红色,而在不在DesignMode中时,则将背景色设置为绿色。
// Form1 inherits from this class
public class MyBase : Form
{
public MyBase()
{
// hookup load event
this.Load += (s, e) =>
{
// check in which state we are
if (this.DesignMode)
{
this.BackColor = Color.Red;
}
else
{
this.BackColor = Color.Green;
}
};
}
}
代码中没有魔术,但请注意使用MyBase
而不是Form
// we inherit from MyBase!
public partial class Form1 : MyBase
{
public Form1()
{
InitializeComponent();
}
}
导致以下结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.