問題分析:
產生界面混亂的主要原因是,winform程序的座標是基於點(Point)的,而Point又與DPI相關,具體就是
一英寸 =72Points
一英寸 = 96pixels96DPI是windows的默認DPI,當它被用戶更改後,可能就會導致界面與設計之初產生了錯亂。
在網上搜索相關資料後,試着將this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi 但是經實測後,發現仍然沒有解決問題:有些界面甚至顯示不全;有些控件甚至會被“截斷”或完全不顯示。
原因是:默認情況下winfrom的Font單位是Point,最終顯示在界面上的尺寸將根據DPI設置自動變化,可以表示爲公式: Point / 72 * DPI = Pixel 按照MSDN的解釋,上述設置比較適合關心程序的可視區域及控件文字在不同的DPI下總是顯示設計時的大小,而不用關心程序界面的絕對大小的情況。
解決辦法:
後來想到web程序中的常用單位是像素(pixel),在不同的機器上也能很好地呈現網頁佈局。那麼如果能在winform程序中也使用像素來定位,問題不就解決了嗎?
的確,在winform中實現該計量單位非常簡單,僅需要在Form的的構造函數中作如下設置即可:
private void InitializeComponent()
{
//設定按字體來縮放控件
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
//設定字體大小爲12px
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(134)));
}