国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 济源市| 景谷| 怀集县| 康乐县| 邯郸市| 阿城市| 万盛区| 陆丰市| 平果县| 红安县| 鹤庆县| 绍兴市| 伊川县| 渭南市| 伊吾县| 岳普湖县| 昌都县| 巍山| 武城县| 兴和县| 河北省| 定西市| 齐河县| 龙陵县| 莱西市| 合江县| 阆中市| 南城县| 怀来县| 桓台县| 衡阳市| 禄劝| 澜沧| 和顺县| 新安县| 聂拉木县| 阿鲁科尔沁旗| 永济市| 绍兴市| 岱山县| 通渭县|