我試圖在調整窗體大小時設置窗體高度,如果條件滿足。我已將它設置爲只允許使用code provided by in this answer手動更改表單的寬度。C#在SizeChanged事件中修改窗體大小事件
我有一個FlowLayoutPanel顯示一組PictureBox控件,每個控件都有一個50像素的固定高度。最初,表單的高度爲38(Size.Height - ClientSize.Height)+ 50 + 6(圖像的邊距。頂部+邊距.Bottom)= 94。
如果控件溢出,默認情況下,FlowLayoutPanel將它們推送下到一個新的線。我想要做的是在發生這種情況時調整窗體大小,或者手動更改窗體寬度,這可能會導致控件跳到下一行。
下面的代碼工作,每當一個新的控件添加到FlowLayoutPanel的(itemPanel)被稱爲:
private void ResizeForm()
{
if (itemPanel.Controls.Count < 1) return;
var lastElement = itemPanel.Controls[itemPanel.Controls.Count - 1];
// The Form is the correct size, no need to resize it:
if (lastElement.Bottom + lastElement.Margin.Bottom == itemPanel.Height) return;
Height = 38 + lastElement.Bottom + lastElement.Margin.Bottom;
}
然而,當我SizeChange事件中調用,這種方法會使表單「閃」最初的高度和新的高度之間:
private void MainForm_SizeChanged(object sender, EventArgs e)
{
ResizeForm();
}
我猜測的原因是因爲安裝高度將再次觸發SizeChange事件,但我不知道如何解決這個問題。設置高度後,當我打印出lastElement.Bottom + lastElement.Margin.Bottom
和itemPanel.Height
的值時,它們是相同的,但代碼仍然以某種方式達到該點。
概括地說,我想只表格寬度是手動改變,但形式的高度改變時,添加項目或寬度改變,從而使FlowLayoutPanel的內部的所有控件可以查看。
這很搞笑。我決定在看到這裏有沒有答案之前再試一次,我提出的解決方案就是這個!當我看到你這樣做時,我正要回答自己的問題,所以我會接受你的回答。謝謝! – driima