8

我向我的表单添加了一些控件并更改了 Anchor 属性,我希望它如何工作,但是当我在运行时调整表单大小时,控件保持在同一个位置。

例如,我在表单的右下角有两个按钮——它们在表单上,​​没有容器或类似的东西。锚点 = 底部,右侧。FormBorderStyle = 相当大。但是当我在运行时拖动调整表单大小时,按钮不会移动。

我错过了什么吗?

时间:2005

4

9 回答 9

12

另一种可能性是您不小心将按钮没有直接放在表单上。相反,您将它们放在某个容器中(例如面板、tableLayoutPanel 等),并且该容器没有正确设置其锚定或停靠值。

只是为了绝对确定您应该查看 Designer.cs 并检查您的按钮是否按this.Controls.Add()功能直接添加到表单中,或者是否添加到任何其他控件列表中(例如。panel.Controls.Add())。

于 2009-10-21T11:27:38.723 回答
5

我知道这是一个旧帖子,但我还是想尝试做出贡献。

我的问题是,当父面板的大小发生变化时,我添加到面板中的表单没有自动调整其大小。

问题是我正在这样做:

form.WindowState = FormWindowState.Maximized; // <-- source of the problem
form.AutoSize = true; //this causes the form to grow only. Don't set it if you want to resize automatically using AnchorStyles, as I did below.
form.FormBorderStyle = FormBorderStyle.Sizable; //I think this is not necessary to solve the problem, but I have left it there just in case :-)
panel1.Controls.Add(form);
form.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
form.Dock = DockStyle.Fill; //this provides the initial size adjust to parent' size.
form.Visible = true;

为了解决,我只评论了第一行//form.WindowState = FormWindowState.Maximized;,一切都像魅力一样。

于 2011-09-11T11:19:08.387 回答
4

此外,如果您设置了自动大小属性,则会造成麻烦。

于 2010-11-16T03:06:08.660 回答
3

Dock 属性设置为什么?这可以否定锚属性。

于 2009-10-21T10:49:26.920 回答
1

我在 VS11 Beta 中有同样的问题。我使用了很多次锚点,它总是能正常工作,但现在我无法理解它们发生了什么,而且不仅 - 码头填充也不起作用!(不使用自动大小或停靠属性)

PS(40 分钟后) 现在看起来我发现了问题:我为 PictureBox 设置了 Resize 事件侦听器,并在onResize处理程序中为新的图片框大小创建了新图像。当我删除新图像创建时,一切正常!

现在我使用SizeChanged事件并在这个事件处理程序中创建新图像。所以我认为在调整大小完成之前我不应该更改发件人对象。

于 2012-08-25T21:20:39.707 回答
0

我有同样的问题。

情况:

TableLayoutPanel一行设置为autosize. 在这一行中,锚定 Right, Bottom 不起作用。按照用户 428955 的规定,将其移除autoSize并将其放置在固定高度解决了该问题。

于 2011-09-29T13:41:04.477 回答
0

我也有类似的问题。我发现这是因为我在 form_load 上调整了我的表单大小。这可以通过在调整表单大小时临时停靠到顶部/左侧来绕过

    private void ResizeFromDesigntimeToRunTime()
    {
        var volatileControls = this.Controls.Cast<Control>().Where(control => (control.Anchor | AnchorStyles.Bottom | AnchorStyles.Right) != AnchorStyles.None).ToList();

        var anchorPairing = volatileControls.ToDictionary(control => control, control => control.Anchor);

        foreach (var control in volatileControls)
            control.Anchor = AnchorStyles.Left | AnchorStyles.Top; //Temporarily reset all controls with an anchor including right or bottom, so that these aren't automatically resized when we adjust form dimensions.

        this.Height = SomeHeight;
        this.Width = SomeWidth;

        foreach (var pair in anchorPairing)
            pair.Key.Anchor = pair.Value;
    }
于 2019-08-07T00:58:08.030 回答
0

如果您的表单是可本地化的,请检查您是否对其他语言进行了任何锚​​点/停靠更改。

于 2018-10-04T12:24:24.420 回答
0

我的问题很简单,
我所有的控件锚属性都设置正确并包含在面板中。
但是我忘记为容器面板设置锚样式,因此容器面板没有按照我想要的方式根据表单边框展开……在设置容器面板的锚属性后,一切都按预期工作。

于 2017-08-29T10:37:16.113 回答