Flowlayoutpanelのレイアウトイベントハンドラーで子のコントロール幅を設定する
-
29-10-2019 - |
質問
子どものコントロールで動的に満たされた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);
}