我向我的表单添加了一些控件并更改了 Anchor 属性,我希望它如何工作,但是当我在运行时调整表单大小时,控件保持在同一个位置。
例如,我在表单的右下角有两个按钮——它们在表单上,没有容器或类似的东西。锚点 = 底部,右侧。FormBorderStyle = 相当大。但是当我在运行时拖动调整表单大小时,按钮不会移动。
我错过了什么吗?
时间:2005
我向我的表单添加了一些控件并更改了 Anchor 属性,我希望它如何工作,但是当我在运行时调整表单大小时,控件保持在同一个位置。
例如,我在表单的右下角有两个按钮——它们在表单上,没有容器或类似的东西。锚点 = 底部,右侧。FormBorderStyle = 相当大。但是当我在运行时拖动调整表单大小时,按钮不会移动。
我错过了什么吗?
时间:2005
另一种可能性是您不小心将按钮没有直接放在表单上。相反,您将它们放在某个容器中(例如面板、tableLayoutPanel 等),并且该容器没有正确设置其锚定或停靠值。
只是为了绝对确定您应该查看 Designer.cs 并检查您的按钮是否按this.Controls.Add()
功能直接添加到表单中,或者是否添加到任何其他控件列表中(例如。panel.Controls.Add()
)。
我知道这是一个旧帖子,但我还是想尝试做出贡献。
我的问题是,当父面板的大小发生变化时,我添加到面板中的表单没有自动调整其大小。
问题是我正在这样做:
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;
,一切都像魅力一样。
此外,如果您设置了自动大小属性,则会造成麻烦。
Dock 属性设置为什么?这可以否定锚属性。
我在 VS11 Beta 中有同样的问题。我使用了很多次锚点,它总是能正常工作,但现在我无法理解它们发生了什么,而且不仅 - 码头填充也不起作用!(不使用自动大小或停靠属性)
PS(40 分钟后) 现在看起来我发现了问题:我为 PictureBox 设置了 Resize 事件侦听器,并在onResize
处理程序中为新的图片框大小创建了新图像。当我删除新图像创建时,一切正常!
现在我使用SizeChanged
事件并在这个事件处理程序中创建新图像。所以我认为在调整大小完成之前我不应该更改发件人对象。
我有同样的问题。
情况:
TableLayoutPanel
一行设置为autosize
. 在这一行中,锚定 Right, Bottom 不起作用。按照用户 428955 的规定,将其移除autoSize
并将其放置在固定高度解决了该问题。
我也有类似的问题。我发现这是因为我在 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;
}
如果您的表单是可本地化的,请检查您是否对其他语言进行了任何锚点/停靠更改。
我的问题很简单,
我所有的控件锚属性都设置正确并包含在面板中。
但是我忘记为容器面板设置锚样式,因此容器面板没有按照我想要的方式根据表单边框展开……在设置容器面板的锚属性后,一切都按预期工作。