0

子コントロールで動的に満たされるflowLayoutPanelがあります。このflowLayoutPanelは、さまざまなフォームの一部のパネルにある可能性があるため、実行時にサイズが変わる可能性があります。

最初の子コントロールを追加するときは、そのWidthをflowLayoutPanel.Width-10に設定します。他のコントロールの場合は、DockStyle=Fillを設定します。

また、flowLayoutPanel_Layoutイベントハンドラーがあり、最初のコントロール幅を変更します。flowLayoutPanel.Controls[0] .Width = flowLayoutPanel.Width -10;

ほとんどの場合は正常に機能しますが、フォームの1つで問題が発生します。フォームが読み込まれると、flowLayoutPanelはすべてのコントロールの幅を1つの値(127)に設定します。フォームを最大化すると、flowLayoutPanel_Layoutは正しいflowLayoutPanel.Width(たとえば、400ピクセルなど)で呼び出されますが、flowLayoutPanel.Controls [0] .Widthは、flowLayoutPanel.Width-10に設定した後も変更されません。 127.例外などはありません。

何がそのような行動を引き起こす可能性がありますか?

4

1 に答える 1

1

問題の原因が見つかりました:この問題は、ネストされたコントロールが多数ある場合に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-exceeds-a-certain-depth-x64.aspx

コントロールでOnSizeChangedをオーバーライドすると、次のようになりました。

protected override void OnSizeChanged(EventArgs e)
{
  if (!DesignMode && IsHandleCreated)
    BeginInvoke((MethodInvoker)delegate{base.OnSizeChanged(e);});
  else
    base.OnSizeChanged(e);
}
于 2011-12-12T08:38:19.420 に答える