2015-05-11 182 views
1

當用戶調整大小並調整我的程序窗口(Winforms)的位置時,即使關閉並重新打開程序後,他們也期望在同一位置看到窗口。我所做的是存儲窗體的寬度,高度,Location.X和Location.Y屬性,並在程序重新打開時重新設置它們。當窗口最大化時獲得非最大化的窗口位置/大小

問題是當窗口最大化時,寬度,高度,X,Y不是指最大化寬度/高度/ X/Y,而是指最大化尺寸。

因此,當用戶使窗口最大化時,關閉並重新打開程序,並取消窗口的最大化,而不是返回到原來的位置/大小,它將保持全尺寸/位置。

因此,在某些事件執行後,如果不使用kludge存儲變量,那麼當窗口最大化時如何獲得非最大化的位置和大小?

回答

2

解決此問題的最佳方法是找到使用RestoreBounds結構。當窗口最大化時,RestoreBounds將引用舊的(未最大化)大小和位置。這是查找這些值的代碼。只需在關閉時保存這些值,然後在重新打開程序時,可以將窗體的Width,Height,Location.X和Location.Y重新設置爲這些保存的值。

bool b = WindowState == FormWindowState.Maximized; 
int xpos = !b? Location.X : RestoreBounds.X; 
int ypos = !b? Location.Y : RestoreBounds.Y; 
int width = !b? Width : RestoreBounds.Width; 
int height = !b? Height : RestoreBounds.Height; 
+1

爲什麼地球上你會比較枚舉的字符串表示形式?只需做一個簡單的'WindowState!= FormWindowState.Maximized'。 – cremor

+0

除了@ cremor的建議,您可以通過將'WindowState == FormWindowState.Maximized'分配給var並測試該布爾值來進一步改進此答案。 –

+0

好了。我搜索了大約15分鐘來查找RestoreBounds屬性,所以這是答案的肉,並且它被應用於我創建的舊代碼,所以請原諒我沒有爲優化而節省5毫秒;) –