- Visual Studio 2013 SP6©2ch.net
828 :デフォルトの名無しさん[sage]:2015/01/31(土) 20:04:36.62 ID:krmI8ohk - >>827
何言ってるのかわからんけど基本全部システム任せで問題ない。
|
- Visual Studio 2013 SP6©2ch.net
831 :デフォルトの名無しさん[sage]:2015/01/31(土) 20:47:22.71 ID:krmI8ohk - >>830
高いDPIに対応するには普通はAutoScaleMode.Dpiにする。 その時はそんな動作にならない。
|
- Visual Studio 2013 SP6©2ch.net
833 :デフォルトの名無しさん[sage]:2015/01/31(土) 21:12:48.00 ID:krmI8ohk - AutoScaleMode.Dpiにした時の動作は基本的にWPFと同じだと思うよ。
要するに画面の座標の単位は物理ピクセルじゃなくて、DIP(1/96インチ)になると考えればいい。 厳密には違うと思うけど。 だから動的にコントロールを追加する時にも破綻は起こらない。
|
- Visual Studio 2013 SP6©2ch.net
835 :デフォルトの名無しさん[sage]:2015/01/31(土) 23:04:01.69 ID:krmI8ohk - public partial class Form1 : Form
{ const int HSpan = 8; const int HCount = 10; const int VSpan = 8; const int VCount = 10; readonly Size ButtonSize = new Size(40, 20); public Form1() { InitializeComponent(); } private void SetClientSize() { var w = (HSpan + ButtonSize.Width) * HCount + HSpan; var h = (VSpan + ButtonSize.Height) * VCount + VSpan; ClientSize = new Size(w, h); }
|
- Visual Studio 2013 SP6©2ch.net
837 :デフォルトの名無しさん[sage]:2015/01/31(土) 23:06:14.48 ID:krmI8ohk - protected override void OnLoad(EventArgs e)
{ base.OnLoad(e); SetClientSize(); int y = VSpan; for (int i = 0; i < HCount; i++ ) { int x = HSpan; for (int j = 0; j < VCount; j++) { var b = new Button() { Location = new Point(x,y), Size = ButtonSize}; Controls.Add(b); x += HSpan + ButtonSize.Width; } y += VSpan + ButtonSize.Height; } } } >>834のいうダメってのはどういう場合を言ってるんだろう。 例えば上のようなコードではDPI変えても何の不具合も起こらない。 もちろんDPIに比例して全体のサイズはちゃんと変わる。
|