2017年2月23日 星期四

[C#]Windows Forms 在不同機器上控制項跑版的原因與解法

是的,我必須承認,當初我找到自己寫的第一支程式並沒有那麼順利。
當我興高采烈地開啟專案時,卻看到...


這到底甚麼鬼,WinForm上面的控制項都不在自己應該有的位置上!
Designer.cs裡面定義的控制項座標還跟設計畫面上的不一樣!

唯一值得慶幸的是,所見及所得...(我是不是應該開心?)

經過Google大神的協助,終於找到問題所在,原來一切都是Windows作業系統在搞怪!
作業系統的顯示設定(100%、125%、150%)會影響視窗的文字以及比例。

而目前的顯示設定為中 - 125%,也使所有視窗程式自動縮放(類似網頁RWD?!)

將顯示設定調整回100%,程式便能照當初設計的畫面正常顯示,接著將所有視窗AutoScaleMode設定為None,即為關閉自動縮放的功能。
更改此設定後,專案、執行檔即可在任何環境下不自動縮放的執行了。

注意:
1. 此方法必須在一開始建置的時候便要設定完成。
2. 若更改顯示設定後已跑版,再關閉自動縮放是不會有任何效果的。
3. 只能改回當初的顯示設定再進行關閉自動縮放。

由於當時做的遊戲動作皆透過畫面控制項Location的移動,想要製作可以像網頁一樣RWD的話,看來還需下一番功夫...

參考資料:
Winforms - Form Controls Shift Position When Solution Opened On Laptop
https://social.msdn.microsoft.com/Forums/vstudio/en-US/1cead620-70a9-4d7c-af65-3d08fa2b2c06/winforms-form-controls-shift-position-when-solution-opened-on-laptop?forum=vbgeneral
Form Looks Different on Another Computer
http://stackoverflow.com/questions/13456469/form-looks-different-on-another-computer
Winforms different sizes in different environments
Windows forms controls' sizes changes when display settings change
How do I force a winform c# application to ignore when a user choose 125% or 150% for the OS font size?
Wrong scaling on Korean PCs

沒有留言:

張貼留言