国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#控件大小隨窗體大小等比例變化

2019-11-14 13:32:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

相信很多博友在開發(fā)初次接觸學(xué)習(xí)C# winForm時(shí),當(dāng)窗體大小變化時(shí),窗體內(nèi)的控件并沒有隨著窗體的變化而變化,最近因?yàn)橐粋€(gè)項(xiàng)目工程的原因,也需要解決這個(gè)問題。通過查閱和學(xué)習(xí),這個(gè)問題得到了解決,或許不是很好的處理方式,但是也值得借鑒。。。

下面我將建立一個(gè)Demo來(lái)大概解釋下這個(gè)方法的實(shí)現(xiàn):(注:我使用的是的VS2010)

Step1:打開VS2010,建立一個(gè)C#Winform項(xiàng)目(注:這里我將其命名為test1,博友們可以自由發(fā)揮哈?。?/p>

           建立之后拖拽控件達(dá)到如圖所示效果:

                                          捕獲

Step2:右擊,查看代碼,在代碼界面添加

1.定義全局變量

PRivate float X;//當(dāng)前窗體的寬度private float Y;//當(dāng)前窗體的高度

2.功能函數(shù)setTag

       /// <summary>       /// 將控件的寬,高,左邊距,頂邊距和字體大小暫存到tag屬性中        /// </summary>       /// <param name="cons">遞歸控件中的控件</param>        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);            }        }

3.功能函數(shù)setControls

       //根據(jù)窗體大小調(diào)整控件大小        private void setControls(float newx, float newy, Control cons)        {            //遍歷窗體中的控件,重新設(shè)置控件的值            foreach (Control con in cons.Controls)            {                string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//獲取控件的Tag屬性值,并分割后存儲(chǔ)字符串?dāng)?shù)組                float a = System.Convert.ToSingle(mytag[0]) * newx;//根據(jù)窗體縮放比例確定控件的值,寬度                con.Width = (int)a;//寬度                a = System.Convert.ToSingle(mytag[1]) * newy;//高度                con.Height = (int)(a);                a = System.Convert.ToSingle(mytag[2]) * newx;//左邊距離                con.Left = (int)(a);                a = System.Convert.ToSingle(mytag[3]) * newy;//上邊緣距離                con.Top = (int)(a);                Single currentSize = System.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);                }            }        }

4.在窗體的Load事件中添加

private void Form1_Load(object sender, EventArgs e)        {            X = this.Width;//獲取窗體的寬度            Y = this.Height;//獲取窗體的高度            setTag(this);//調(diào)用方法        }

5.在窗體的Resize事件中添加

private void Form1_Resize(object sender, EventArgs e)        {            float newx = (this.Width) / X; //窗體寬度縮放比例            float newy = (this.Height) / Y;//窗體高度縮放比例            setControls(newx, newy, this);//隨窗體改變控件大小        }

 

Step3: 點(diǎn)擊啟動(dòng)調(diào)試,至此該功能已經(jīng)實(shí)現(xiàn),是不是發(fā)現(xiàn)控件都可以等比例變化了?。╫ver)

 

總結(jié):當(dāng)然這只是一個(gè)小Demo,在實(shí)際應(yīng)用中,還需要各位博友的腦洞打開,才能更好的和各位的代碼契合,更好的應(yīng)用到實(shí)際的項(xiàng)目中去。這也是我的第一篇博文,雖然篇幅不長(zhǎng),但是內(nèi)容還算充實(shí)吧!希望以后各位多多支持~


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吴忠市| 浑源县| 南汇区| 山东省| 苏州市| 南安市| 化德县| 丹寨县| 鄂伦春自治旗| 沧州市| 海南省| 淮南市| 陈巴尔虎旗| 金寨县| 濮阳县| 衡南县| 西吉县| 郯城县| 关岭| 兴安县| 通州市| 陈巴尔虎旗| 郁南县| 鹿泉市| 鄂托克旗| 蒙阴县| 洞头县| 随州市| 汶川县| 镇远县| 连州市| 万年县| 旅游| 松潘县| 靖宇县| 绿春县| 石泉县| 陵水| 黔南| 云浮市| 土默特右旗|