繁体   English   中英

C#CenterToScreen()Winforms设计器屏幕位置

[英]C# CenterToScreen() Winforms Designer Screen Position

我有一个项目,该项目具有从基本表单(称为frmBase)继承属性的表单。 我遇到了一个让我很困惑的问题:

我希望程序位于用户屏幕的中心,所以我添加了

this.CenterToScreen();

到frmBase_Load()。 当我运行应用程序BUT时,这种方法非常有用,但是当我尝试设计从frmBase继承的任何窗体时,它们都移到了设计器屏幕的右下角,我必须使用滚动条才能看到它们。

如果我移动

this.CenterToScreen();

到frmBase()代码时,该应用在运行时默认为屏幕的左上角,但设计者会为我正确显示该表单。 知道发生了什么吗? 我进行了搜索,但似乎找不到类似的问题,尽管我知道我不可能成为这种情况的第一人。

正如HansReza所指出的,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;
            }
        };
    }
}

继承基本表单的Form1

代码中没有魔术,但请注意使用MyBase而不是Form

// we inherit from MyBase!
public partial class Form1 : MyBase
{
    public Form1()
    {
        InitializeComponent();
    }
}

导致以下结果:

一站式设计时间和运行时间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM