Winform空間位置とサイズ適応
記事の参考:http://blog.csdn.net/loveme1204/archive/2007/12/24/1964577.aspx
vbで作ったのです.c嚖に訳しただけです.
実はAnchorrとDock属性も実現できますが、容器の効果だけが理想的で、フォントサイズも変化していないようです.最近のフォーラムでは、このようなスタンプがたくさんあります.具体的なコードは以下の通りです.
[csharp] view plin copy
prvate void set Tag(Control) コンサート { foreach (コントローラ コンサート in cons.Coontrols) { con.Tag = con.Width +":" + con.Height + ":" + con.Left + ":" + コンサート.トップ + ":" + con.Font.Size if (con.Coontrolls.sont > 0) setTag(con) } ) prvate void set Controls(float) newx float newy 制御装置 コンサート { foreach (コントローラ コンサート in コンサート .Controls ) { string[] マイペース = con.Tag.ToString().Split(new char[] { ':' }); float a. = Covert.ToSingle(myde[0] * newx; con.Width = (int)a a=Covert.ToSingle(myde[1] * newy; con.Height = (int)(a) a=Covert.ToSingle(myde[2] * newx; con.Left = (int)(a) a=Covert.ToSingle(myde[3] * newy; コンサート.トップ = (int)(a) Single currentSize = Covert.ToSingle (mys[4] * newy; コンサート .Font =new Font (con.Font .Name ,currentSize,con.Font .スタイル ,コンサート .ユニット ); if(con.Coontrols) .Count >0) { set Controls (newx ,newy ,コンサート ); } } ) void Form 1_Resize(object) sender EventAgs e) { // throw new Exception("The" method or operation is not implemented."); float newx = (this.Width )/ X; // float newy = (this.Height - this.status Strip 1.Height) / (Y - y): float newy = this.Height / Y; set Controls(newx) newy this; this.Text = this.Width.ToString() +「 "+ this.Height.ToString() ) [csharp] view plin copy
フォームロードに追加: [csharp] view plin copy
this.Resize += new EventHandler(Form 1 Resize); X = this.Width Y = this.Height; y = this.status Strip 1.Height; setsTag (this) もちろん二つのグローバル変数を定義しました.prvate float X;prvate float Y;
注意深いあなたはきっとyがまだあります.これはstatus Strip 1などのコントロールがあるからです.これは注意しなければなりません.フォームの実際の幅と高さはstatus Strip 1などを差し引かなければなりません.
容器なら、アンチョーとDockの属性も修正したほうがいいです.
効果は悪くないです
スレッド:http://topic.csdn.net/u/20080516/13/12a39498-314f-4a7b-a210-6988f79da0f4.htm
上のプログラムでは、コントロールの属性を使わないと正常に動作できます.そうでないと問題が発生しますので、その上で改善しました.
1
vbで作ったのです.c嚖に訳しただけです.
実はAnchorrとDock属性も実現できますが、容器の効果だけが理想的で、フォントサイズも変化していないようです.最近のフォーラムでは、このようなスタンプがたくさんあります.具体的なコードは以下の通りです.
[csharp] view plin copy
prvate void set Tag(Control) コンサート { foreach (コントローラ コンサート in cons.Coontrols) { con.Tag = con.Width +":" + con.Height + ":" + con.Left + ":" + コンサート.トップ + ":" + con.Font.Size if (con.Coontrolls.sont > 0) setTag(con) } ) prvate void set Controls(float) newx float newy 制御装置 コンサート { foreach (コントローラ コンサート in コンサート .Controls ) { string[] マイペース = con.Tag.ToString().Split(new char[] { ':' }); float a. = Covert.ToSingle(myde[0] * newx; con.Width = (int)a a=Covert.ToSingle(myde[1] * newy; con.Height = (int)(a) a=Covert.ToSingle(myde[2] * newx; con.Left = (int)(a) a=Covert.ToSingle(myde[3] * newy; コンサート.トップ = (int)(a) Single currentSize = Covert.ToSingle (mys[4] * newy; コンサート .Font =new Font (con.Font .Name ,currentSize,con.Font .スタイル ,コンサート .ユニット ); if(con.Coontrols) .Count >0) { set Controls (newx ,newy ,コンサート ); } } ) void Form 1_Resize(object) sender EventAgs e) { // throw new Exception("The" method or operation is not implemented."); float newx = (this.Width )/ X; // float newy = (this.Height - this.status Strip 1.Height) / (Y - y): float newy = this.Height / Y; set Controls(newx) newy this; this.Text = this.Width.ToString() +「 "+ this.Height.ToString() ) [csharp] view plin copy
フォームロードに追加: [csharp] view plin copy
this.Resize += new EventHandler(Form 1 Resize); X = this.Width Y = this.Height; y = this.status Strip 1.Height; setsTag (this) もちろん二つのグローバル変数を定義しました.prvate float X;prvate float Y;
注意深いあなたはきっとyがまだあります.これはstatus Strip 1などのコントロールがあるからです.これは注意しなければなりません.フォームの実際の幅と高さはstatus Strip 1などを差し引かなければなりません.
容器なら、アンチョーとDockの属性も修正したほうがいいです.
効果は悪くないです
スレッド:http://topic.csdn.net/u/20080516/13/12a39498-314f-4a7b-a210-6988f79da0f4.htm
上のプログラムでは、コントロールの属性を使わないと正常に動作できます.そうでないと問題が発生しますので、その上で改善しました.
1
private void setOriginControlsSize(Control cons)
{
foreach (Control con in cons.Controls)
{
if (con.Name.Length == 0)
continue;
string strCtlSize = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
dicControls.Add(con.Name, strCtlSize);
Console.WriteLine("{0}:{1}", con.Name, strCtlSize);
if (con.Controls.Count > 0)
setOriginControlsSize(con);
}
}
private void setNewControlsSize(float newx, float newy, Control cons)
{
foreach (Control con in cons.Controls)
{
object objCtlSize;
Console.WriteLine("{0}", con.Name);
if (false == dicControls.TryGetValue(con.Name, out objCtlSize))
continue;
Console.WriteLine("{0}", objCtlSize);
string[] mytag = objCtlSize.ToString().Split(new char[] { ':' });
float a = Convert.ToSingle(mytag[0]) * newx;
con.Width = (int)a;
a = Convert.ToSingle(mytag[1]) * newy;
con.Height = (int)(a);
a = Convert.ToSingle(mytag[2]) * newx;
con.Left = (int)(a);
a = Convert.ToSingle(mytag[3]) * newy;
con.Top = (int)(a);
Single currentSize = Convert.ToSingle(mytag[4]) * newy;
con.Font = new System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
if (con.Controls.Count > 0)
{
setNewControlsSize(newx, newy, con);
}
}
}
定義変数が必要です privte Dictionary<string、object>dicControls;