C#窗體縮放時窗體上控件同縮放比例變化


https://www.cnblogs.com/sakalaka/p/5135230.html 及 https://blog.csdn.net/qq_36526650/article/details/78442382

編寫完程序后,運行時發現窗體放大后控件保持原來的屬性,很丑,哈哈哈~~~從網上搜索如何控件與窗體同比例縮放,很慶幸,一下子找到第二個鏈接,然后進第一個鏈接學習到了,簡單易懂。下方的是防止自己忘記又需要重新理解的筆記。

1. 定義2個全局float 變量X,Y,用來記錄窗體默認窗口時的寬度和高度。

  float X;  //默認窗口的寬度

  float Y;  //默認窗口的高度

2. 窗體Load的時候將窗體的寬度、高度賦值給X、Y。

  private void Form1_Load(object sender, EventArgs e)

  {

    X = this.Width;   //將窗體的寬度賦值給X
         Y = this.Height;   //將窗體的高度賦值給Y

    setTag(this);   //調用setTag函數(下一步介紹)

  }

3. 窗體Load的時候調用setTag函數(第2步最后的語句)將窗體上所有子控件的寬度、高度、左邊距、頂部距離及字體大小暫存起來。

  private void setTag(Control cons)

  {

    foreach (Control con in cons.Controls)
            {
                con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
                if (con.Controls.Count > 0) setTag(con);   //如果此控件存在子控件,則此控件的子控件執行此函數一次
            }

  }

4. 窗體縮放時,計算出相應的縮放比例,然后通過縮放比例參數調用setControls函數,改變窗體上所有子控件的寬度、高度、左邊距、頂部距離及字體大小的信息。

  4.1 計算縮放比例

  private void Form1_Resize(object sender, EventArgs e)

  {

    float newx= (this.Width) / X;   //窗體寬度縮放比例

    float newy= (this.Height) / Y;   //窗體高度縮放比例

    setControls(newx, newy, this);   //調用setControls函數(下一小步介紹)

  }

  4.2 通過縮放比例,改變窗體上所有子控件的寬度、高度、左邊距、頂部距離及字體大小的信息。

  private void setControls(float newx, float newy, Control cons)

  {

    foreach (Control con in cons.Controls)

    {
                  string[] myTag = con.Tag.ToString().Split(':');     //將con的寬、高、左邊距、頂邊距離及字體大小通過字符“:”分割成數組
                  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 Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
                  if (con.Controls.Count > 0) setControls(newx, newy, con);     //如果此控件存在子控件,則將相應子控件執行一次setControls函數

    }

  }

OK OK OK, 照搬,哈哈哈~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM