WinForms Anchor Control更改Location Origin?

时间:2012-03-14 18:25:41

标签: c# winforms mono

我一直将我的C#/ .NET 2.0项目移植到Mono上以便在其他平台上使用,但这似乎在NATIVE WinForms实现中引发了一个问题。

我已将问题隔离到Control的(特别是Button)Anchor属性与它的Location属性的Y-component之间的关系。当AnchorStyle属性设置为Top时,Location属性的原点是表单的ClientArea(不包括标题栏)。但是,将锚点更改为“底部”会将原点更改为整个窗口的左上角(包括标题栏)。

这是一个小的Form类,它说明了差异:

public class RawCodeForm : Form
{
    public RawCodeForm()
    {
        Button b = new Button();
        b.Text = "Test";
        b.Location = new Point( 10, 10 );
        b.Size = new Size( 75, 23 );
        b.Anchor = AnchorStyles.Left | AnchorStyles.Top;
        //b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;

        this.Controls.Add( b );
        this.Size = new Size( 100, 200 );
        this.Location = new Point( 100, 100 );
        this.Show();
    }
}

尝试交换b.Anchor线以查看更改位置。

这是一个记录在案的错误,还是我错过了另一个需要设置的属性?


编辑:感谢您指出表单以大小(300,300)开头。我假设它是(0,0)直到设置。

在上面的简单测试表单之外,现在的问题似乎是稍后更改的FormBorderStyle导致表单调整大小。我的猜测是,在Mono(或主机操作系统)下,更改的FormBorderStyle会调整ClientArea的大小,其中ClientSize区域在本机WinForms中保持相同的大小。

1 个答案:

答案 0 :(得分:4)

这是因为您在添加按钮后更改了表单的大小。

之前改变它
this.Size = new Size(100, 200);
this.Location = new Point(100, 100);

Button b = new Button();
b.Text = "Test";
b.Location = new Point(10, 10);
b.Size = new Size(75, 23);
//b.Anchor = AnchorStyles.Left | AnchorStyles.Top;
b.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;

this.Controls.Add(b);
this.Show();

当固定在底部时,按钮只跟随下边框的变化。