999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

讓VB控件大小隨窗體改變而改變

2014-04-29 06:12:42朱彥廷
計(jì)算機(jī)時(shí)代 2014年3期

朱彥廷

摘 要: 當(dāng)VB窗體大小改變時(shí),其中的控件(以及控件上的文字)大小不會(huì)自動(dòng)隨之改變,這是VB的一個(gè)缺陷,要解決該問題,應(yīng)該保證控件寬度、高度、距窗體左邊和上邊的距離,以及窗體寬度、高度的比值不變,控件上的文字面積和窗體面積的比值不變,據(jù)此,給出了較為完美、簡單、健壯的解決方法。

關(guān)鍵詞: VB; 窗體; 控件; 文字

中圖分類號(hào):TP312 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)03-42-02

0 引言

VB簡單易學(xué),是非常適合非專業(yè)程序員的可視化程序設(shè)計(jì)語言[1]。但當(dāng)窗體大小改變時(shí),其中的控件大小不會(huì)自動(dòng)隨之改變,這將破壞原來的布局,因此改變幾乎毫無意義,所以很多程序員只好限制窗體改變大小,但這樣編寫出來的程序不完美。對于這樣的“先天”不足,我們在此嘗試“后天”彌補(bǔ)。

1 原理

當(dāng)窗體大小改變時(shí),對于控件,應(yīng)保證其寬度、高度、距窗體左邊和上邊的距離,以及窗體寬度、高度的比值不變。記下最初的這幾個(gè)比值,以后據(jù)此足以算出控件新的大小和位置。

控件上可能有文字,如果不對其處理,即大小不變,擴(kuò)大窗體文字又可能顯得太小,特別是逐漸縮小窗體,文字將由橫排變成豎排、邊緣缺失,甚至控件布局也將錯(cuò)亂(見圖2,原來大小一致(見圖1)的小文本框(里面有文字,但尚未輸入)變得不一致(如其中第61和62個(gè))),而且窗體還不能太小(屆時(shí)鼠標(biāo)將不能再向小拖動(dòng)邊框),因此文字的大小也應(yīng)隨窗體改變。

但窗體中文字高度(即字號(hào))、寬度的比值是固定的,無法同時(shí)保證其寬度、高度,以及窗體寬度、高度的比值不變,所以不能沿用對控件的做法,文獻(xiàn)[2]很難得注意到了這個(gè)問題,提出了一個(gè)解決方法,即:保證文字高度和窗體高度的比值不變。但這樣如果只改變窗體寬度和文字高度,也即大小(因高度、寬度的比值固定)將不會(huì)改變,縮小寬度時(shí)還將出現(xiàn)前述的情形,可見這種方法并沒有完全解決問題。本文認(rèn)為,應(yīng)該保證文字面積和窗體面積的比值不變,即

Controls(i).Font.Size'

=Controls(i).Font.Size

=Controls(i).Font.Size

=ap(i).sp

其中,Controls(i).Font.Size是控件i上的文字最初的高度[3],Controls.(i).Font.Size'是它在窗體改變后的高度,F(xiàn)orm1.Width是窗體最初的寬度,F(xiàn)orm1.Width'是窗體改變后的寬度,F(xiàn)orm1.Height是窗體最初的高度,F(xiàn)orm1.Height'是窗體改變后的高度,a是文字寬度、高度的比值,ap(i).sp是控件上的文字高度和窗體最初面積的平方根的比值。這樣只要窗體大小改變,文字大小就會(huì)隨之改變,窗體可以小到只剩標(biāo)題欄,而且原來的布局不變(見圖3)。

圖1 原來的窗體

圖2 縮小的窗體(文字大小不變)

圖3 縮小的窗體(文字大小隨之改變)

具體地說,窗體高度包括上、下邊框、標(biāo)題欄的高度,它們不與窗體高度成比例改變(與窗體類型有關(guān),對于某一類型的窗體其實(shí)是固定值),因此為保證布局不變,應(yīng)用窗體內(nèi)部高度(除去上、下邊框、標(biāo)題欄的高度)而不是窗體高度,那么它的值是多少呢?幸運(yùn)的是,屬性ScaleHeight[4]表示的就是窗體內(nèi)部高度,不用再想辦法求出。窗體寬度包括左、右邊框的寬度,其余和窗體高度類似。

2 代碼

具體的程序代碼(所用的VB版本是6.0)如下:

Private Type cp

wp As Single

hp As Single

tp As Single

lp As Single

sp As Single

End Type

Private ap() As cp

Private Sub Form_Load()

ReDim ap(0 To Controls.Count-1)

Dim i As Integer

On Error Resume Next'當(dāng)發(fā)生錯(cuò)誤(因有的控件(如圖像框)沒有Font屬性;有的控件(如定時(shí)器)沒有Width、Height屬性)時(shí),忽略該行,繼續(xù)執(zhí)行

For i=0 To Controls.Count-1

ap(i).wp=Controls(i).Width/Form1.ScaleWidth

'記錄控件寬度和窗體內(nèi)部寬度的比值

ap(i).hp=Controls(i).Height/Form1.ScaleHeight

'記錄控件高度和窗體內(nèi)部高度的比值

ap(i).tp=Controls(i).Top/Form1.ScaleHeight

'記錄控件到窗體上邊的距離和窗體內(nèi)部高度的比值

ap(i).lp=Controls(i).Left/Form1.ScaleWidth

'記錄控件到窗體左邊的距離和窗體內(nèi)部寬度的比值

ap(i).sp=Controls(i).Font.Size/Sqr(Form1.ScaleHeight*Form1

.ScaleWidth) '記錄控件上的文字字號(hào)和窗體內(nèi)部面積的平方根的比值

Next i

End Sub

Private Sub Form_Resize()

Dim i As Integer

On Error Resume Next'當(dāng)發(fā)生錯(cuò)誤(有的控件(如圖像框)沒有Font屬性;有的控件(如定時(shí)器)沒有Width、Height屬性;文字小于1.5磅(如果窗體太小);窗體內(nèi)部高度為0(縮小窗體到只剩標(biāo)題欄、最小化時(shí))時(shí),忽略該行,繼續(xù)執(zhí)行[5]

For i=0 To Controls.Count - 1

Controls(i).Left=ap(i).lp*Form2.ScaleWidth

Controls(i).Top=ap(i).tp*Form2.ScaleHeight

Controls(i).Width=ap(i).wp*Form2.ScaleWidth

Controls(i).Height=ap(i).hp*Form2.ScaleHeight '以上4條語句

如簡化為Controls(i).Move ap(i).lp*Form1.ScaleWidth,ap(i).tp*Form1.ScaleHeight, ap(i).wp*Form1.ScaleWidth, ap(i).hp *Form1.ScaleHeight,對有的控件(如組合框,其Height是不可改變的),將因出錯(cuò)導(dǎo)致語句不能執(zhí)行,致使控件位置、寬度、高度均不能改變

Controls(i).Font.Size=ap(i).sp*Sqr(Form1.ScaleHeight

*Form1.ScaleWidth)

Next i

End Sub

3 結(jié)束語

與這方面見到的其他文獻(xiàn)(幾乎都見于網(wǎng)絡(luò),期刊上幾乎沒有)相比,本文給出的方法更為完美。本文使用窗體內(nèi)部高度、內(nèi)部寬度,而不是直接用高度、寬度,排除了窗體邊框、標(biāo)題欄的影響,更為嚴(yán)謹(jǐn)、美觀;較好地解決了控件上的文字的改變問題。本文的方法簡單;應(yīng)用方便;健壯,即遇到錯(cuò)誤能夠被妥善處理,不會(huì)導(dǎo)致程序崩潰。

參考文獻(xiàn):

[1] 教育部考試中心.Visual Basic語言程序設(shè)計(jì)[M].高等教育出版社,

2013.

[2] 陳翠松.在VB中實(shí)現(xiàn)控件大小的自動(dòng)改變[J].計(jì)算機(jī)時(shí)代,2001.1.

[3] 李淑華.VB程序設(shè)計(jì)及應(yīng)用[M].高等教育出版社,2003.

[4] 《視窗世界》雜志社.手把手VB100例[M].北京賽迪電子出版社,

2004.

[5] 沈祥玖.VB程序設(shè)計(jì)[M].高等教育出版社,2003.

主站蜘蛛池模板: 国产欧美日韩另类精彩视频| 国产乱人免费视频| 亚洲精品麻豆| 国产成人精品高清在线| 久久久久国产精品嫩草影院| www中文字幕在线观看| 久久婷婷六月| 国产成人乱无码视频| 97在线国产视频| 国产精品亚洲一区二区三区在线观看| 亚洲天堂在线免费| 亚洲欧美在线综合图区| 国产成人8x视频一区二区| 欧美日韩精品一区二区在线线| 国产福利免费视频| 99久久国产综合精品2023 | jizz国产在线| 亚洲三级片在线看| 亚洲无线国产观看| 亚洲无码精品在线播放| 乱人伦99久久| 亚洲人成网站18禁动漫无码| 在线视频亚洲色图| 91精品啪在线观看国产91九色| av免费在线观看美女叉开腿| 日韩欧美在线观看| 高清无码不卡视频| 国产精品高清国产三级囯产AV | 国产精品久久久久久久久kt| 人人妻人人澡人人爽欧美一区| 欧美精品xx| 在线观看免费黄色网址| 国产无码网站在线观看| 2022国产无码在线| 国产v精品成人免费视频71pao| 日韩av无码精品专区| 乱人伦中文视频在线观看免费| AV网站中文| 精品少妇人妻无码久久| V一区无码内射国产| 特级aaaaaaaaa毛片免费视频| 天堂va亚洲va欧美va国产| 久久免费视频6| 青青青国产在线播放| 国产一区二区三区日韩精品| 亚洲AV成人一区国产精品| 国产欧美精品一区二区| 国产乱子伦一区二区=| 国禁国产you女视频网站| 女同国产精品一区二区| 91偷拍一区| 2021精品国产自在现线看| 日韩最新中文字幕| 国产精品女同一区三区五区| 亚洲VA中文字幕| 欧美精品亚洲二区| 久久久精品无码一二三区| 婷婷综合缴情亚洲五月伊| 国产真实乱了在线播放| 国产一区二区三区在线观看视频| 最新无码专区超级碰碰碰| 永久在线播放| 国产精品流白浆在线观看| 欧美不卡在线视频| 中文字幕在线欧美| 亚洲色成人www在线观看| 日本一本在线视频| 99re热精品视频国产免费| 日本三级精品| 3D动漫精品啪啪一区二区下载| 日本道中文字幕久久一区| 欧美高清国产| 九色视频线上播放| 婷婷激情亚洲| 免费观看亚洲人成网站| 一级成人a毛片免费播放| 99资源在线| 欧美亚洲国产日韩电影在线| 成年A级毛片| 华人在线亚洲欧美精品| 国产午夜福利片在线观看| 国产精品久久自在自线观看|