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
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;