在 FlowLayoutPanel 的布局事件处理程序中设置子控件宽度

发布于 2024-12-20 01:04:57 字数 567 浏览 3 评论 0 原文

我有一个 flowLayoutPanel,它动态地填充了子控件。 此 flowLayoutPanel 可能位于不同表单的某些面板上,因此其大小可能会在运行时发生变化。

添加第一个子控件时,我将其宽度设置为 flowLayoutPanel.Width - 10。 对于其他控件,我设置 DockStyle = Fill。

还有 flowLayoutPanel_Layout 事件处理程序,用于更改第一个控件的宽度: flowLayoutPanel.Controls[0].Width = flowLayoutPanel.Width - 10;

在大多数情况下,它工作正常,但在其中一种表单上,我遇到了一个问题:加载表单时,flowLayoutPanel 将所有控件宽度设置为一个值 (127)。当我最大化表单时,使用正确的 flowLayoutPanel.Width (例如,400 像素)调用 flowLayoutPanel_Layout ,但 flowLayoutPanel.Controls[0].Width 在将其设置为 flowLayoutPanel.Width - 10 后不会更改。它仍然等于127. 没有例外或任何事情。

什么会导致这种行为?

I've got a flowLayoutPanel which is filled dynamically with child controls.
This flowLayoutPanel might be on some panels on different forms, so its size might change in runtime.

When adding the first child control, I set its Width to flowLayoutPanel.Width - 10.
For other controls I set DockStyle = Fill.

There is also flowLayoutPanel_Layout event handler hich changes the first control width: flowLayoutPanel.Controls[0].Width = flowLayoutPanel.Width - 10;

For most cases it works fine, but on one of the forms, I've got a problem: when the form is loaded, the flowLayoutPanel sets all controls width to one value (127). When I maximize the form, flowLayoutPanel_Layout is called with correct flowLayoutPanel.Width (for example, something like 400 pixels), but flowLayoutPanel.Controls[0].Width is not changed after setting it to flowLayoutPanel.Width - 10. It still equals to 127. There is no exception or anything.

What can cause such behaviour?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七秒鱼° 2024-12-27 01:04:57

找到问题的根源:64位Windows Vista和7上有很多嵌套控件时会出现此问题:
http://blogs.msdn.com/b/alejacma/archive/2008/11/20/controls-won-t-get-resized-once-the-nesting-hierarchy-of-windows-覆盖

我的控件中的 OnSizeChanged 有助于:

protected override void OnSizeChanged(EventArgs e)
{
  if (!DesignMode && IsHandleCreated)
    BeginInvoke((MethodInvoker)delegate{base.OnSizeChanged(e);});
  else
    base.OnSizeChanged(e);
}

Found the root of the problem: this issue appears on 64-bit Windows Vista and 7 when there are lots of nested controls:
http://blogs.msdn.com/b/alejacma/archive/2008/11/20/controls-won-t-get-resized-once-the-nesting-hierarchy-of-windows-exceeds-a-certain-depth-x64.aspx

Overriding OnSizeChanged in my control helped:

protected override void OnSizeChanged(EventArgs e)
{
  if (!DesignMode && IsHandleCreated)
    BeginInvoke((MethodInvoker)delegate{base.OnSizeChanged(e);});
  else
    base.OnSizeChanged(e);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文