首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用代码设置Windows Forms窗体的StartPosition?

如何使用代码设置Windows Forms窗体的StartPosition?
EN

Stack Overflow用户
提问于 2008-10-22 13:34:23
回答 8查看 58.9K关注 0票数 17

有没有办法使用代码设置Windows Forms窗体的StartPosition?似乎无论我尝试什么,都会导致StartPostion成为默认设置。

下面是我在表单中执行的操作,以显示:

代码语言:javascript
复制
    public DealsForm()
    {
        InitializeComponent();
        this.StartPosition = FormStartPosition.CenterParent;
    }

下面是我用来显示表单的方法:

代码语言:javascript
复制
    private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        DealsForm frm = new DealsForm();

        frm.DataSource = this.Deals;

        frm.Show(this);
    }

我已经尝试在上述每个方法中添加以下内容,但都无济于事:

代码语言:javascript
复制
this.StartPosition = FormStartPosition.CenterParent;

如果我通过属性编辑器设置它...它工作得很完美,但我真的很想通过代码来做到这一点。

不需要动脑筋。但对于我的生活,我似乎不能弄清楚...也许我需要更多的咖啡因。

更新:

如果我做一个ShowDialog()并传递给父对象,它就可以工作了……但是我真的不想把它显示为一个对话框。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-10-22 14:01:59

如果我执行一个ShowDialog()并传递父对象,它就能工作...但是我真的不想把它显示为一个对话框。

这是正确的,因为ShowDialog会设置frm.Parent == nvShowDeals.Parent

由于您使用的是.Show(),因此frm.Parent ==为null,因此FormStartPosition.CenterParent将被忽略。

因此,为了完成此功能,我将进行以下更改:

代码语言:javascript
复制
public DealsForm()
{
    InitializeComponent();
    //this.StartPosition = FormStartPosition.CenterParent;
}

//DealsForm_Load Event
private void DealsForm_Load(object sender, EventArgs e)
{
    this.Location = this.Owner.Location;  //NEW CODE
}

在这里,我将进行以下更改:

代码语言:javascript
复制
private void nvShowDeals_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    DealsForm frm = new DealsForm();

    frm.DataSource = this.Deals;
    frm.StartPosition = FormStartPosition.Manual; //NEW CODE
    frm.Show(this);
}
票数 12
EN

Stack Overflow用户

发布于 2008-10-22 14:09:24

也许你并不孤单。也许你并没有疯。阅读本文(Microsoft Connect客户反馈):

Windows Form StartPosition property only works for .ShowDialog method and not for .Show method

客户:"Windows Form StartPosition只适用于.ShowDialog方法,不适用于.Show方法。注意:我还附上了简单的代码和结果的图像。“

MS:“不幸的是,我们将无法在未来的版本中修复这个特定的问题,因为这里的修复将是对WinForms 1、1.1和2的行为的破坏性更改。”

票数 18
EN

Stack Overflow用户

发布于 2013-07-25 22:08:09

您可以通过在Form_Load事件中调用this.CenterToParent()来完成此操作(如果父级实际上是已知的)。不要在构造函数中调用它,因为它在调用Show(form)时设置了父对象。

代码语言:javascript
复制
private void myForm_Load(object sender, EventArgs e)
{
    CenterToParent();
}

我知道这个帖子很老,但它可以很容易地回答,所以希望能帮助其他遇到它的人找到简单的解决方案。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/225741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档