我動態地將按鈕添加到WinForm。正如我這樣做,我重新定位現有的按鈕,以防止重疊。正在使用AutoSize
屬性自動設置Width
。
對於更長的文本(將按鈕超出默認值Width
),下面的代碼不起作用。
例如:
b.Width
是75AutoSize
之前被設置b.Width
是75AutoSize
被設定後- 當換檔以外的其他鍵時,它通過
b.Width + buffer
= 83 - 然而後對其進行移位
addButton()
完成,AutoSize
將寬度設置爲150,重疊下一個僅83像素的Button 158
AutoSize
出現改變控件的大小來不及爲它是使用。我怎樣才能立即做到這一點?
嘗試1 - 代碼
public void addButton(string text)
{
const int buffer = 8;
//Construct new button
Button b = new Button();
b.Text = text;
b.AutoSize = true;
b.Location = new Point(0, 0);
//Shift over all other buttons to prevent overlap
//b.Width is incorrect below, because b.AutoSize hasn't taken effect
for (int i = 0; i < Controls.Count; i++)
if (Controls[i] is Button)
Controls[i].Location = new Point(Controls[i].Location.X + b.Width + buffer, Controls[i].Location.Y);
Controls.add(b);
}
嘗試2
搜查谷歌和StackOverflow的以下:
- C#自動調整立即
- C#自動調整快捷
- C#自動調整工作不
嘗試3
這裏問。
最後手段
如果沒有別的辦法,定時器可以設置爲重新定位在每個tick按鈕。然而這是非常草率的設計,並沒有幫助學習AutoSize
的錯綜複雜。如果可能,我想避免這種解決方法。
我不知道這是最好的選擇(我還沒有找到一個更好的解決方案),但我做了什麼在過去,通過在其中一個事件處理程序上放置一個事件處理程序並在Resize上更改它們的位置來重新定位我所有的自動大小按鈕。 –
我在[Button.AutoResize設置後直接獲取寬度]回答了這個問題(https://stackoverflow.com/questions/45784751/get-width-directly-after-button-autoresize-is-set/45786796#45786796) – TnTinMn
@TnTinMn如果您以前回答過相同的問題,那麼您應該投票將其作爲重複關閉。 –