2014-10-18 44 views
2

msdn爲什麼不直接從代碼中使用Form.CenterToScreen?

不要從代碼中直接調用此。相反,將StartPosition屬性設置爲CenterScreen。

任何人都知道爲什麼?

+0

爲什麼不自己嘗試一下,看看? – Rahul 2014-10-18 22:11:44

+0

我正在使用它,它工作正常。我很好奇微軟爲什麼不推薦使用它。 :) – ctomek 2014-10-18 22:12:56

+5

請參閱:http://stackoverflow.com/a/6837499/2202894 – 2014-10-18 22:14:46

回答

8

由於通常的原因,當你在MSDN Library中看到這個註釋時,有的方式太多的可能性,你會使用這個錯誤。在代碼中只有一個,您可以調用此方法並獲得預期結果。

這是由窗體的Size屬性造成的問題。當然需要知道如何居中。太多的程序員將它們在屬性窗口中看到的值視爲福音,他們會認爲窗口在用戶的機器上也具有這樣的大小。這種情況非常罕見。

第一個問題是用戶的喜好,他們可以改變標題文本和控制按鈕的大小。或者他們會啓用Aero(或不啓用),這會使窗口變胖。這可能會導致大小偏移量微小,實際窗口的大小在運行時會與您在「屬性」窗口中看到的大小不同。 Winforms已經提供了一些東西,它實際上並不存儲設計的Size屬性,它存儲了ClientSize屬性。直到創建窗口,CreateHandle()方法運行時纔會知道實際大小。因此,您不能在窗體的構造函數中調用CenterToScreen(),也不能在Show()調用之前調用它,這爲時尚早。

第二個問題是窗體的AutoScaleMode屬性。最近尤其重要的是,許多用戶不再以默認設置96 DPI運行他們的機器。自Vista以來,特別容易改變。這將導致窗口的尺寸大大減小。直到窗口重新調整後才能知道實際大小,並在運行OnLoad()方法時完成。

稍後調用它會產生視覺工件,用戶實際上可以看到窗口在屏幕上移動。所以只有一個地方,表單的OnLoad()方法/ Load事件處理程序。但它已經發生在那裏,這是StartPosition屬性設置爲CenterScreen時應用的位置。所以沒有其他的理由可以自己來打電話了。它應該是一種私人方法,當然後來很難解決這種設計錯誤。

相關問題