Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在FlowLayoutPanel的布局事件处理程序中设置子控件宽度_C#_.net_Winforms_Flowlayoutpanel - Fatal编程技术网

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

C# 在FlowLayoutPanel的布局事件处理程序中设置子控件宽度,c#,.net,winforms,flowlayoutpanel,C#,.net,Winforms,Flowlayoutpanel,我有一个flowLayoutPanel,其中动态填充了子控件。 此flowLayoutPanel可能位于不同窗体上的某些面板上,因此其大小可能在运行时更改 添加第一个子控件时,我将其宽度设置为flowLayoutPanel.Width-10。 对于其他控件,我设置DockStyle=Fill 还有一个flowLayoutPanel\u布局事件处理程序,用于更改第一个控件的宽度:flowLayoutPanel.Controls[0]。宽度=flowLayoutPanel.width-10 在大多数

我有一个flowLayoutPanel,其中动态填充了子控件。 此flowLayoutPanel可能位于不同窗体上的某些面板上,因此其大小可能在运行时更改

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

还有一个flowLayoutPanel\u布局事件处理程序,用于更改第一个控件的宽度:flowLayoutPanel.Controls[0]。宽度=flowLayoutPanel.width-10

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


是什么导致了这种行为?

找到了问题的根源:当64位Windows Vista和7上存在大量嵌套控件时,会出现此问题:

在我的控制中覆盖OnSizeChanged有助于:

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