我在WinForms表单中有一个UserControl,其中是一个面板,当父窗口调整大小时,它通过自定义代码调整其内容的大小:
private void ResizeElements(FlowLayoutPanel panel) {
panel.SuspendLayout();
foreach (Control ctrl in panel.Controls) {
ctrl.Width = panel.ClientSize.Width - 20;
}
panel.ResumeLayout();
}
private void flowPanel_Resize(object sender, EventArgs e) {
ResizeElements((FlowLayoutPanel)sender);
}
当我通过在右下角抓住窗口并在那里调整大小来手动调整窗口大小时,这很正常:
不起作用但是,我最大化窗口,然后点击最小化和最大化之间的恢复控制框。
该面板中的控件似乎具有正确的宽度,但包含它们的FlowLayoutPanel具有水平滚动条:
当我再次手动调整窗口大小时,水平滚动条消失,一切都按预期进行。
flowpanel有DockingStyle.Fill
更新:我目前正在执行以下操作来解决此问题:
private void frmMain_Resize(object sender, EventArgs e)
{
var oldWindowState = _previousWindowState;
_previousWindowState = this.WindowState;
if (oldWindowState == FormWindowState.Maximized && this.WindowState == FormWindowState.Normal)
{
this.Width++;
this.Width--;
}
}
所以我在检测到还原点击时手动调整大小,强制触发正确的事件。 我完全清楚这是一个邪恶的黑客,仍然希望有一个更干净的解决方案。
(更新):家长控制:
WinForm
->Panel Dock: Fill, AutoSize: false
->UserControl Dock: Fill, AutoSize: false
->TabControl Dock: Fill
->Tab
->FlowLayoutPanel Dock: Fill, AutoSize: false