Flowlayoutpanelのレイアウトイベントハンドラーで子のコントロール幅を設定する

StackOverflow https://stackoverflow.com/questions/8417226

質問

子どものコントロールで動的に満たされたFlowLayoutPanelがあります。このflowlayoutpanelは、さまざまなフォームの一部のパネル上にある可能性があるため、そのサイズはランタイムで変化する可能性があります。

最初のチャイルドコントロールを追加すると、その幅をFlowLayoutPanel.Width -10に設定しました。

FlowLayoutPanel_Layoutイベントハンドラーもあります。最初の制御幅を変更します:flowlayoutpanel.controls [0] .width = flowlayoutpanel.width -10;

ほとんどの場合、それは正常に動作しますが、フォームの1つでは問題があります。フォームがロードされると、Flowlayoutpanelはすべてのコントロール幅を1つの値に設定します(127)。フォームを最大化すると、flowlayoutpanel_layoutは正しいflowlayoutpanel.width(たとえば、400ピクセルのようなもの)で呼び出されますが、flowlayoutpanel.controls [0]が変更されません。 127.例外も何もありません。

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

役に立ちましたか?

解決

問題のルートが見つかりました:この問題は、ネストされたコントロールがたくさんあるときに64ビットのWindows Vistaに表示され、7は7に表示されます。http://blogs.msdn.com/b/alejacma/archive/2008/11/20/controls-won-t-get-resized-once-the-nesting-hierarchy-of-windows-exceed-深さ-X64.aspx

私のコントロールにおいてシゼチケンジをオーバーライドするのは役に立ちました:

protected override void OnSizeChanged(EventArgs e)
{
  if (!DesignMode && IsHandleCreated)
    BeginInvoke((MethodInvoker)delegate{base.OnSizeChanged(e);});
  else
    base.OnSizeChanged(e);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top