visualbasic程序設(shè)計課件之第7章常用控件_第1頁
visualbasic程序設(shè)計課件之第7章常用控件_第2頁
visualbasic程序設(shè)計課件之第7章常用控件_第3頁
visualbasic程序設(shè)計課件之第7章常用控件_第4頁
visualbasic程序設(shè)計課件之第7章常用控件_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第7章常用控件

7.1單選按鈕和復(fù)選框

7.2框架

7.3列表框和組合框

7.4滾動條和滾動滑塊

7.5時鐘

7.6進(jìn)度條*7.7數(shù)字增減按鈕*7.8Animation控件*7.9SSTab控件

7.10鼠標(biāo)器、鍵盤*7.11剪貼板VB可使用的三類控件內(nèi)部控件位于工具箱中,不能刪除ActiveX控件擴(kuò)展名為.ocx的獨立文件圖標(biāo)控件:工程—部件—控件添加到工具箱中代碼控件:工程—引用不能添加到工具箱中可插入對象其他應(yīng)用程序創(chuàng)建的對象,如Excel工作表等,可以添加到工具箱中作為控件使用工程—部件—可插入對象1.單選按鈕從多個選項(標(biāo)題)中選擇一個

Name—option Caption—標(biāo)題 Value(默認(rèn)屬性)—True選定 False未選定Alignment—確定按鈕和標(biāo)題的相對位置 0:按鈕在左,標(biāo)題在右(缺省設(shè)置) 1:按鈕在右,標(biāo)題在左單選按鈕標(biāo)題7.1單選按鈕(OptionButton)和復(fù)選框(CheckBox)

Style—確定標(biāo)題和按鈕的顯示方式0--Standard:標(biāo)準(zhǔn)方式(顯示標(biāo)題及按鈕) 1--Graphical:圖形方式(只顯示標(biāo)題)

Picture(Style=1) 放置未選中時的圖標(biāo)、位圖或文字 DownPicture(Style=1) 放置選中時的圖標(biāo)、位圖或文字 DisabledPicture(Style=1) 放置禁止選擇時的圖標(biāo)、位圖或文字事件 Click鼠標(biāo)單擊后,其Value值將自動改變

2.復(fù)選框也叫檢查框,可以同時選擇多個標(biāo)題。Name—CheckCaption—標(biāo)題Value(默認(rèn)屬性)—確定是否被選中0—Unchecked未被選定1—Checked選定2—Grayed灰色,禁止選擇Alighment:同單選按鈕Style:同單選按鈕例7.1通過單選按鈕和復(fù)選框使文本框內(nèi)的文字顯示不同的字體和修飾。用click()編程復(fù)選框標(biāo)題Style=1Style=07.2框架(Frame)框架內(nèi)控件的創(chuàng)建方法:

建立獨立控件的方法:先創(chuàng)建框架,再單擊工具箱上的控件,然后用鼠標(biāo)(此時鼠標(biāo)光標(biāo)出現(xiàn)“+”)在框架內(nèi)適當(dāng)位置拖拉出適當(dāng)大小的控件(不能使用雙擊工具箱上控件的自動方式)

建立控件數(shù)組的方法:先創(chuàng)建框架,建立第一個控件,然后通過“剪切”和粘貼(Ctrl+V)的方法將選定的控件粘貼到框架內(nèi),從而建立一個控件數(shù)組(不能直接用鼠標(biāo)拖動控件的方式)框架的作用是將若干個單選按鈕作為一個組,或者對一組控件進(jìn)行整體激活或屏蔽操作。

框架設(shè)Caption為"字體"Name—Frame Caption—框架標(biāo)題 Enabled—確定該控件是否可用 False:標(biāo)題呈灰色,框架內(nèi)的對象被屏蔽,不允許進(jìn)行操作

True:標(biāo)題呈正常顯示,允許對框架內(nèi)控件進(jìn)行操作 Visible—確定該控件是否可見 True:框架及其控件可見 False:框架及其控件被隱藏事件 框架可以響應(yīng)Click、DblClick事件,但一般不用編寫有關(guān)框架的事件過程。例7.2設(shè)計字體和字號兩個框架,其中各有若干個字體和字號單選按鈕。在選擇了某個字體和字號后,按“確定”按鈕,使文本框內(nèi)的文字按指定的字體和字號顯示。

7.3列表框(ListBox)和組合框(ComboBox)1.列表框用來顯示項目列表,程序運行時,用戶可從其中可以選擇一項或多項。如果列表框中選項較多,在列表框中裝不下時,列表框會自動加上垂直滾動條。在列表框中可以單列顯示,也可以多列顯示,還可以在選項左邊增加復(fù)選框。Style=0Style=1(1)主要屬性Name—List List—是一個字符型數(shù)組,存放列表項,List(0)表示第1個列表項內(nèi)容,List(i)表示第i+1個列表項內(nèi)容①在屬性窗口的List屬性中輸入:每輸入一項用Ctrl+回車鍵,可繼續(xù)輸入下一項②在程序中用AddItem方法加入:List1.AddItem列表項[,索引號]ListIndex—獲得選中項目的序號,沒有項目選中時為-1Selected—邏輯型數(shù)組,Selected(i)的值為True表示第i+1項被選中,否則沒有選中。ListCount—列表框中項目總數(shù),ListCount-1是最后一項的下標(biāo)Sorted—確定List中列表項的排列方式。True:按字母順序排列;False:按加入先后順序排列Text(默認(rèn)屬性)—被選中列表項的內(nèi)容引用List1.List(ListIndex)與List1.Text具有相同的值MultiSelect—確定是否可以進(jìn)行多項選擇0--None:禁止多項選擇1--Simple:簡單多項選擇(鼠標(biāo)每擊一次可選中一個,按空格鍵取消最近的選擇)2--Extended:按住Ctrl,用鼠標(biāo)單擊可選中不連續(xù)的多項或空格鍵取消選擇;按住Shift同時用鼠標(biāo)或光標(biāo)移動鍵可選擇連續(xù)的多項Style—列表框樣式0—只顯示列表項文本1—列表項文本前帶復(fù)選框Column—指定列表框中列的數(shù)目0—垂直單列顯示,垂直滾動n—n列顯示,先顯示第1列,再顯示第2列,水平滾動ListIndex、ListCount、Selected、Text只能在程序中引用Sorted必須在屬性窗口中設(shè)置ListIndex和Selected分別用來檢測選中的列表項的序號及某個列表項是否被選擇,它們既可以在程序中被引用,也可以在程序中設(shè)置Column=0Column=3(2)方法① AddItem方法可以在列表框中加入一個項目 對象.AddItemitem[,index]List1.AddItem“計算機軟件技術(shù)基礎(chǔ)”,3(Item若為其他類型的常數(shù),則按字符串對待) ② RemoveItem方法可以從列表框中刪除一個項目對象.RemoveItemindexList1.RemoveItem7 ③ Clear方法可以清除列表框中的所有項目 對象.Clear(3)事件Click事件,一般不必編程,因為通常List控件與命令按鈕聯(lián)合使用,在選擇列表框中的項目時,需要按命令按鈕,可使用命令按鈕的Click事件來讀取列表框Text屬性值。

例7.3①在Form_Load()事件中用AddItem方法在列表框中加入5個項目。②允許通過“添加”操作將文本框中輸入的內(nèi)容作為項目添加到列表框中③當(dāng)選中列表框的某個項目后單擊“刪除”按鈕,可將選中的項目刪除掉;④當(dāng)選中列表框中的項目然后單擊“修改”按鈕時,可將選中的項目內(nèi)容放入文本框中由用戶進(jìn)行修改,然后單擊“修改確認(rèn)”按鈕確認(rèn)修改結(jié)果。初始時,“修改確認(rèn)”按鈕是不可選的編制5個事件過程

①Form_Load()添加5項②Command1_Click()將文本框的內(nèi)容添加到列表框中③Command2_Click()刪除選中的項④Command3_Click()將選中的項放入文本框⑤Command4_Click()將文本框的內(nèi)容替換列表框內(nèi)容2.組合框(ComboBox)

組合框?qū)⑽谋究蚝土斜砜蚪M合成一個控件,用戶既可以在列表框中選定項目,也可以在文本框中輸入文本來選定項目。設(shè)計狀態(tài)運行狀態(tài)設(shè)計狀態(tài)運行狀態(tài)下拉式組合框Style=0只顯示文本框和下拉箭頭,不顯示列表框,文本框高度不能改變可直接輸入文本,也可單擊下拉箭頭彈出列表框,選中某項后,該項先寫入文本框,同時下拉列表消失簡單組合框Style=1同時顯示文本框和列表框,沒有下拉箭頭,列表框的大小必須在設(shè)計時拉出,且在運行中不再改變??芍苯虞斎胛谋?,也可從列表框選中項目,文本框內(nèi)顯示,列表框始終顯示。下拉式列表框Style=2與下拉式組合框相同與下拉式組合框相似,不同的是:只能從列表項中選擇,不能輸入文本列表框中的項目清單只有在程序運行時才能看到。下拉式組合框和簡單組合框的文本框中輸入的數(shù)據(jù)不能自動添加到列表框中。(1)主要屬性Name—ComboStyle—設(shè)置組合框樣式0—下拉式組合框(默認(rèn)樣式)1—簡單組合框2—下拉列表框?qū)傩訪ist、ListIndex、ListCount、Sorted、Text(默認(rèn)屬性)與列表框相同屬性SelStart,SelLength,SelText與文本框相同(2)方法主要使用與列表框相同的AddItem、RemoveItem和Clear方法,用于在列表框中添加、刪除或清除項目(3)事件三種風(fēng)格的組合框均響應(yīng)Click()事件簡單組合框可響應(yīng)DblClick事件例7.4在窗口中選擇復(fù)選框“計算機”后,可在下拉式組合框的下拉列表框中選擇計算機型號,也可直接在組合框的文本框中輸入計算機型號,當(dāng)選取操作系統(tǒng)的類型并按了“OK”按鈕后,右邊文本框中顯示您所選擇的計算機、臺數(shù)及操作系統(tǒng)類型。需要編制5個事件過程:Form_Load()初始化Check1_Click()設(shè)置Combo1和Text1可用與否Check2_Click()設(shè)置Option1和Option2可用與否Combo1_LostFocus()將Combo1.text裝入Combo1.List中將選中的信息裝入列表框Command1_Click()7.4滾動條(ScrollBar)和滾動滑塊(Slider)1.滾動條滾動條的主要作用是:①與不支持滾動的控件(如窗體)配合使用,給它們提供滾動查看的功能。②實現(xiàn)數(shù)據(jù)的連續(xù)調(diào)整,如控制聲音音量或調(diào)整圖片顏色等。滾動條分為垂直滾動條VScroll和水平滾動條HScroll(1)主要屬性Name—HScroll,VScrollMax—最大值(-32,768~32,767)Min—最小值(-32,768~32,767)SmallChange:單擊滾動條兩端箭頭時,滑塊移動的增量LargeChange:單擊滾動條空白處時,滑塊移動的增量Value(默認(rèn)屬性)—滑塊位置所代表的值水平滾動條垂直滾動條SmallChangeMinValueMaxSmallChangeLargeChangeLargeChange(2)主要事件 Scroll:拖動滑塊時會觸發(fā)Scroll事件。 Change:Value屬性改變時觸發(fā)Change事件。例7.5用一個文本框(Text1)顯示水平滾動條(HScroll1)中滑塊當(dāng)前位置所代表的值。初始設(shè)置:Min=0Max=100Value=50Smallchange=2Largechange=10滾動條HScroll1的Change事件過程:SubHScroll1_Change()Text1.Text=HScroll1.ValueEndSub

請將上述change事件過程改為scroll事件過程,觀察運行結(jié)果的變化。例7.6設(shè)計一個調(diào)色板程序,用三個水平滾動條改變?nèi)壤?,合成的顏色顯示在右邊的文本框Text1中(用合成的顏色設(shè)置其BackColor屬性);用同樣的方法設(shè)置文本框Text2的前景和背景色。用滾動條的Value值表示各種顏色的比例,合成顏色=Red+Green*256+Blue*256*256對三個滾動條分別進(jìn)行change或scroll事件編程,確定文本框1的背景色對兩個命令按鈕進(jìn)行click事件編程,確定文本框2的前景色和背景色2.滾動滑塊Slider滾動滑塊是Windows操作系統(tǒng)提供的一種ActiveX控件,位于MicrosoftWindowsCommonControl6.0中。它由刻度和“滑塊”共同構(gòu)成。其中標(biāo)尺由Min和Max屬性定義?!盎瑝K”可由用戶通過鼠標(biāo)或光標(biāo)移動鍵控制。滾動滑塊經(jīng)常用來設(shè)置圖形中某個點的值,設(shè)定要傳送給數(shù)組的數(shù)的范圍,改變窗體、字段或其它圖形對象的大小等。運行時,可動態(tài)設(shè)置Min和Max屬性以反映新的取值范圍。Value屬性返回滑塊的當(dāng)前位置。通過使用MouseDown和MouseUp等事件,Slider控件可以圖形方式從一定的取值范圍內(nèi)選取一個值。(1)主要屬性Name—SliderMax,Min,SmallChange,LargeChange,Value屬性與滾動條相同TickStyle—設(shè)置標(biāo)尺的位置及滑塊的形狀0123TickFrequency—設(shè)置滑塊的滑動頻率,值為n表示每隔n個單位顯示一個刻度點??潭葦?shù)目=(Max-Min)/TickFrequency+1TextPosition—設(shè)置鼠標(biāo)操作時,當(dāng)前刻度值的提示位置(2)主要事件與滾動條相同,有Scroll和Change事件例7.7通過移動滑塊來改變文本框中文字的大小。PrivateSubForm_Load()Slider1.Min=8Slider1.Max=72Slider1.SmallChange=2Slider1.LargeChange=8Slider1.TickFrequency=2EndSubPrivateSubSlider1_Scroll()Text1.FontSize=Slider1.ValueEndSub

時鐘控件以Interval為時間間隔產(chǎn)生Timer事件??捎肨imer事件來計時,或控制某一程序的運行。 1.主要屬性 Name—TimerInterval—控制觸發(fā)Timer事件的間隔時間,單位為毫秒(0.001s),取值范圍為0~65535,即65.535秒。 Interval=0:屏蔽計時器,即不觸發(fā)Timer事件。 Enabled(默認(rèn)屬性)—設(shè)置時鐘是否計時 True:有效計時False:停止時鐘工作 2.事件 Timer事件每隔Interval時間被觸發(fā)一次,通過該事件可以產(chǎn)生系統(tǒng)時間或控制程序的運行時間。7.5時鐘(Timer)【例】用時鐘控件進(jìn)行計時,在標(biāo)簽中以數(shù)字形式顯示系統(tǒng)時間,每隔1秒跳字.將系統(tǒng)函數(shù)Time$()得到的系統(tǒng)時間存入標(biāo)簽的Caption屬性中,并通過設(shè)置時鐘的interval=1000使時鐘每秒產(chǎn)生一個Timer事件觸發(fā)標(biāo)簽的顯示。設(shè)計時窗體上會出現(xiàn)時鐘控件,但運行時,該控件消失。PrivateSubTimer1_Timer()Label1.Caption=Time$()EndSub數(shù)字時鐘Dimh%,m%,s%PrivateSubCommand1_Click()Timer1.Enabled=TrueEndSubPrivateSubForm_Load()h=0:m=1:s=0hh=Format$(h,"00")mm=Format$(m,"00")ss=Format$(s,"00")Label1=hh&":"&mm&":"&ssTimer1.Enabled=FalseEndSubPrivateSubTimer1_Timer()Ifm=0Andh>0Thenh=h-1:m=60EndIfIfs=0Andm>0Thenm=m-1:s=60EndIfIfs>0Thens=s-1EndIfhh=Format$(h,"00")mm=Format$(m,"00")ss=Format$(s,"00")Label1=hh&":"&mm&":"&ssIfh=0Andm=0Ands=0ThenMsgBox("時間到!")EndEndIfEndSub【例】用時鐘控件進(jìn)行倒計時,在標(biāo)簽中以數(shù)字形式顯示系統(tǒng)時間,每隔1秒跳字.演示例7.8設(shè)計一個定時鬧鐘。用戶在兩個文本框中輸入定時的小時和分,然后按“定時”按鈕啟動時鐘,時鐘以1秒間隔顯示系統(tǒng)時間?!巴V埂卑粹o用來制止鈴響,“結(jié)束”按鈕用來終止程序運行。

PrivateSubTimer1_Timer()Label5.Caption=Time$‘自動顯示系統(tǒng)時間IfMid$(Time$,1,5)=hour+":"+minuteThenFori=1To100Beep‘定時響鈴NextiEndIfEndSubTime$的表示形式為:hh:mm:ss例7.9用時鐘控件控制蝴蝶從窗體內(nèi)飛走的動畫。設(shè)計三個Image控件,通過picture屬性在Image2和Image3中各裝入一個不同形態(tài)蝴蝶飛舞的圖片,運行時,在Image1中每隔0.08秒依次裝入兩幅圖片,形成動態(tài)效果,并通過move方法將Image1從左下角移到右上角。PrivateSubTimer1_Timer()StaticpickbmpAsBooleanImage1.MoveImage1.Left+20,Image1.Top-10IfpickbmpThenImage1.Picture=Image2.PictureElseImage1.Picture=Image3.PictureEndIfpickbmp=NotpickbmpEndSub進(jìn)度條控件用來顯示某種操作的進(jìn)度,它也是一種ActiveX控件,由Windows操作系統(tǒng)提供,位于MicrosoftWindowsCommonControl6.0中。1.主要屬性Max進(jìn)度條的最大值(左邊界值)Min進(jìn)度條的最小值(右邊界值)Value進(jìn)度條當(dāng)前值,該屬性只能在程序中設(shè)置和引用。其中,Min<=Value<=Max,Value/(Max-Min)的百分比數(shù)即為被填充的藍(lán)色方塊數(shù)2.事件Click事件7.6進(jìn)度條(ProgressBar)例7.10設(shè)計一個進(jìn)度條,用來指示一個大數(shù)組冗長的操作進(jìn)度,即進(jìn)度條的進(jìn)度表示處理數(shù)組的進(jìn)展情況。假設(shè)數(shù)組有25000個元素,將ProgressBar1的Min和Max分別設(shè)置為數(shù)組的下界和上界,開始時ProgressBar1的Value值設(shè)置為Min。在循環(huán)中每對一個數(shù)組元素進(jìn)行操作,就把數(shù)組元素的下標(biāo)值賦給ProressBar1的Value。隨著Value的增加,藍(lán)色方塊逐步向右延伸用來制作“數(shù)字增減”按鈕,位于MicrosoftWindowsCommonControl-26.0中。它往往與其他控件“捆綁”在一起使用,方便用戶修改與它關(guān)聯(lián)的伙伴控件。例如,它經(jīng)常與文本框或命令按鈕捆綁使用。當(dāng)單擊向上或向下的箭頭時,文本框或命令按鈕中的值會相應(yīng)地增加或減少。①在窗體中繪制伙伴控件②在窗體中繪制UpDown控件③用鼠標(biāo)右鍵單擊UpDown控件,并單擊“屬性”彈出“屬性頁”對話框④選擇“合作者”選項卡⑤選中“自動合作者”復(fù)選框(即將AutoBuddy屬性設(shè)置為True)⑥選中“同步合作者”復(fù)選框(即將SyncBuddy屬性設(shè)置為True)*7.7UpDown控件(1)UpDown控件的屬性頁有三個選項卡:“通用”選項卡,指明UpDown控件的位置、方向“合作者”選項卡,指明其伙伴控件的名稱及屬性“滾動”選項卡中,指明最大值、最小值及增減量(2)UpDown可通過UpClick()和DownClick()事件觸發(fā)。例:將UpDown控件與Text1和Label1聯(lián)合使用,分別將Text1.text和Label1.Caption設(shè)為0,UpDown1和UpDown2的Max值設(shè)為20和100,Increment值分別設(shè)為1和10,則不必編程,Text1中的數(shù)字按1進(jìn)行增減,直到20和0為止;Label1中的數(shù)字按10進(jìn)行增減,直到100和0為止。①用“合作者”屬性頁將Uodown1和Text1合作,將UpDown2與Label1合作②用“滾動”屬性頁設(shè)置UpDown1和UpDown2的Value、Max、Min和Increment屬性值③運行時,直接點擊數(shù)字增減按鈕1.Animation控件用來顯示無聲的AVI視頻文件或無聲動畫片,它位于MicrosoftWindowsCommonControl-26.0中。在ProgramFiles\MicrosoftVisualStudio\Common\Graphics\AVIS中可以找到許多無聲的.avi文件*7.8Animation和MMControl控件(2)方法①Open打開文件Animation1.Open文件名②Play播放Animation1.Playn播放n次Animation1.Play循環(huán)播放③Stop停止Animation1.Stop④Close關(guān)閉文件Animation1.Close(1)Animation主要屬性Name:AnimationCenter(居中):為True時,動畫在控件的中央播放AutoPlay(自動播放):為True時,用Open打開文件時自動播放,否則,必須用Play播放。PrivateSubAnimation1_Click()WithCommonDialog1.Filter="avi(*.avi)|*.avi".ShowOpenEndWithWithAnimation1.Autoplay=True.OpenCommonDialog1.FilenameEndWithEndSub例7.11動畫片播放窗體上設(shè)置四個命令按鈕,分別表示“打開”、“播放”、“停止”和“關(guān)閉”,一個框架,內(nèi)有一個復(fù)選框和一個文本框。要求:“打開”—打開filecopy.avi文件“播放”—若選定復(fù)選框,則重復(fù)10次播放fiilecopy.avi(次數(shù)保存在文本框Text1中);否則,循環(huán)播放“停止”—停止播放“關(guān)閉”—關(guān)閉動畫窗口PrivateSubCommand2_Click()IfCheck1ThenAnimation1.PlayVal(Text1)ElseAnimation1.PlayEndIfCommand3.Enabled=TrueEndSub

用來播放Wave、AVI、MIDI、CD等類型的文件,它位于MocrosoftMultimediaControl6.0中。2.MMControl控件前一個下一個播放暫停前進(jìn)后退停止錄制彈出(1)主要屬性Name:MMControlAutoEnable:是否自動檢測各按鈕的狀態(tài)DeviceType:設(shè)置多媒體設(shè)備的類型播放AVI文件用MControl1.DeviceType=“AVIVideo”Command:用于向媒體設(shè)備發(fā)出各種命令,共14種命令Back退后一步Close關(guān)閉一個文件Eject彈出光盤Next到下一軌道的起始點Open打開一個媒體文件Pause暫停播放Play播放一個文件Prev回到當(dāng)前軌道的起點Record對一個設(shè)備進(jìn)行記錄Save保存打開的文件Sound播音Seek尋找位置(位置由To屬性給出)Step前進(jìn)一步Stop停止播放或記錄例如:MMControl1mand=“open”打開一個媒體設(shè)備(2)視頻播放器PrivateSubForm_Load()MMControl1.FileName=“C:\ProgramFiles\MicrosoftVisualStudio\Common\Graphics\videos\blur24.avi”MMControl1.hWndDiplay=Picture1.hWnd‘hWnd為句柄MMControl1.DeviceType=“avivideo"MMControl1.Command="Open"EndSubPrivateSubMMControl1_PlayClick(CancelAsInteger)MMControl1.Notify=TrueEndSubPrivateSubMMControl1_Done(NotifyCodeAsInteger)IfMMControl1.NotifyValue=1ThenMMControl1.To=0MMControl1.Command=“Seek”EndIfEndSub視頻播放器(3)CD播放器(4)同時播放Wave和MIDI的播放器用來制作包括多個選項卡(標(biāo)簽)的對話框,它位于MicrosoftTabbedDialogControl6.0中(1)SSTab控件的屬性頁

Style決定SSTab控件上選項卡的樣式Tabs決定選項卡的數(shù)量TabsPerRow決定SSTab控件上每一行選項卡的數(shù)量Rows決定SSTab上選項卡的行數(shù)(2)SSTab控件的主要屬性*7.9SSTab控件例7.12設(shè)計一個具有兩個選項卡(標(biāo)簽)的對話框制作步驟:(1)將SSTab控件添加到工具箱中,并在窗體上創(chuàng)建一個SSTab控件(2)通過SSTab的屬性頁設(shè)置其屬性(包括選項卡數(shù)Tabs=2及其標(biāo)題)(3)在每個選項卡中添加一個Text控件,其中存放一段文字(可用Form_load()編程將某段文字賦給Text1.Text,另一段文字賦給Text2.Text)7.10鼠標(biāo)器和鍵盤鼠標(biāo)和鍵盤是主要的輸入設(shè)備,對鼠標(biāo)和鍵盤事件進(jìn)行編程是VB程序設(shè)計的基本技術(shù)。鼠標(biāo)事件和鍵盤事件用來監(jiān)視用戶是否對鼠標(biāo)或鍵盤進(jìn)行了操作。鼠標(biāo)事件:檢測鼠標(biāo)指針的位置,判斷按了哪個鼠標(biāo)按鈕,識別鼠標(biāo)按鈕是否與Shift、Ctrl或Alt鍵同時按下等。窗體和大部分控件都能響應(yīng)鼠標(biāo)事件。鍵盤事件:檢測是否按了某個鍵,是上檔鍵還是下檔鍵;測試鍵盤上的某個鍵是按下還是釋放;識別按鍵的掃描碼和ASCII碼;設(shè)置功能鍵等。窗體、復(fù)選框、命令按鈕、文本框等都能響應(yīng)鍵盤事件。7.10.1鼠標(biāo)事件可供窗體或其他控件對象識別鼠標(biāo)的位置或動作的事件1.Click事件(1)當(dāng)在一個對象上按下然后釋放一個鼠標(biāo)按鈕時,或者某些控件的值發(fā)生改變時,將觸發(fā)Click事件。(2)單擊一個控件除了產(chǎn)生Click事件以外還可產(chǎn)生MouseDown和MouseUp事件。這三種事件發(fā)生的順序根據(jù)控件的不同而不同。對ListBox和CommandButton控件來說,這些事件按下列順序發(fā)生:MouseDown、Click、MouseUp。對FileListBox,Label或PictureBox控件來說,這些事件按下列順序發(fā)生:MouseDown、MouseUp和Click。(3)Click事件不區(qū)分按了鼠標(biāo)的哪個鍵,當(dāng)要區(qū)別鼠標(biāo)的左、右、中按鈕時,應(yīng)使用MouseDown和MouseUp事件2.DblClick事件雙擊鼠標(biāo)左鍵時發(fā)生3.MouseDown事件SubObject_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)4.MouseUp事件SubObject_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)5.MouseMove事件SubObject_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Button=1或ButtonAnd1≠0左鍵Button=2或ButtonAnd2≠0右鍵Button=4或ButtonAnd4≠0中鍵Shift=1或ShiftAnd1≠0Shift鍵Shift=2或ShiftAnd2≠0Ctrl鍵Shift=4或ShiftAnd4≠0Alt鍵例7.13用MouseMove事件檢測鼠標(biāo)在窗體上的位置。在窗體上設(shè)置兩個文本框,一個顯示鼠標(biāo)位置的x值,另一個顯示y值,使用MouseMove事件編程:PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)Text1.Text=xText2.Text=yEndSub程序運行時,隨著鼠標(biāo)在窗體上移動,顯示不同的坐標(biāo)值。例7.14聯(lián)合使用MouseMove、MouseDown和MouseUp事件設(shè)計一個簡單的畫圖程序(按右鍵畫圓,按住左鍵并移動畫線)。MouseDown事件判定是按了左鍵還是右鍵:若是左鍵,則保存線條的起點坐標(biāo);若是右鍵,則畫一個直徑為280的圓;MouseMove事件用來畫線(從起點到終點)MouseUp事件表示釋放鼠標(biāo),從而解除畫圖狀態(tài)窗體屬性:MousePoint:鼠標(biāo)指針形狀取值0~15,99(用戶定義)MouseIcon:自定義鼠標(biāo)圖標(biāo)(當(dāng)MousePointer為99時,由窗體的MouseIcon屬性設(shè)置鼠標(biāo)光標(biāo)的形狀)7.10.2鍵盤事件

可供文本框等控件接受鍵盤的輸入或動作1.三個鍵盤事件(1)KeyPress事件(當(dāng)按下并釋放一個鍵時被觸發(fā),返回按鍵的ASCII代碼,不包括編輯鍵和F功能鍵)SubObject_KeyPress(keyasciiAsInteger)Subobject_KeyPress([indexAsInteger,]keyasciiAsInteger)(2)KeyDown事件(按任一鍵時被觸發(fā),返回該鍵的掃描碼)SubForm_KeyDown(keycodeAsInteger,shiftAsInteger)Subobject_KeyDown([indexAsInteger,]keycodeAsInteger,shiftAsInteger)(3)KeyUp事件(釋放任一鍵時被觸發(fā),返回該鍵的掃描碼)

SubForm_KeyUp(keycodeAsInteger,shiftAsInteger)Subobject_KeyUp([indexAsInteger,]keycodeAsInteger,shiftAsInteger)KeyAscii:按鍵的ASCII碼Keycode:按鍵的掃描碼Shift:與鼠標(biāo)器的Shift相同PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)ShiftKey=ShiftAnd7‘表示取后三位SelectCaseShiftKeyCase1'或vbShiftMaskPrint"YoupressedtheSHIFTkey."Case2'或vbCtrlMaskPrint"YoupressedtheCTRLkey."Case4'或vbAltMaskPrint"YoupressedtheALTkey."Case3Print"YoupressedbothSHIFTandCTRL."Case5Print"YoupressedbothSHIFTandALT."Case6Print"YoupressedbothCTRLandALT."Case7Print"YoupressedSHIFT,CTRL,andALT."EndSelectEndSubKeyPressKeyDownKeyUp事件發(fā)生的時間輸入一個ASCII字符按下任意一個鍵釋放按鍵參數(shù)值KeyAscii接收到按鍵的ASCII值KeyCode接收到按鍵的掃描碼KeyCode接收到按鍵的掃描碼按Shift+A時事件發(fā)生的次數(shù)事件發(fā)生一次事件發(fā)生兩次事件發(fā)生兩次按Shift+A時參數(shù)值(鍵盤處于大寫狀態(tài))97(a)第一次是16(Shift)第二次是65(A)第一次是65(A)第二次是16(Shift)按Shift+A時參數(shù)值(鍵盤處于小寫狀態(tài))65(A)第一次是16(Shift)第二次是65(A)第一次是65(A)第二次是16(Shift)2.KeyPress事件與KeyDown及KeyUp事件的區(qū)別按大鍵盤“1”494949按小鍵盤“1”4997973.當(dāng)窗體和其他控件都使用了KeyPress事件時,例如:SubForm_KeyPress(KeyAsciiAsInteger)KeyAscii=KeyAscii+2EndSub SubText1_KeyPress(KeyAsciiAsInteger)KeyAscii=KeyAscii+2EndSub應(yīng)先設(shè)置窗體的KeyPreview屬性若KeyPreview=True窗體先接收鍵盤事件,然后其他活動控件才能接收鍵盤事件若KeyPreview=False其他活動控件先接收鍵盤事件,然后窗體才能接收鍵盤事件當(dāng)KeyPreview=True,從鍵盤輸入字母“a”時,Text1接收到字母“e”;當(dāng)KeyPreview=False,從鍵盤輸入字母“a”時,Text1接收到字母“c”。4.KryPress事件的應(yīng)用①限制數(shù)據(jù)輸入SubText1_KeyPress(KeyAsciiAsInteger) IfKeyAscii<48OrKeyAscii>57Then KeyAscii=0EndIfEndSub‘文本框只能接收“0”~“9”的數(shù)字字符,其他字符均不予顯示②修改輸入的數(shù)據(jù)PrivateSubText1_KeyPress(KeyAsciiAsInteger)Text2=Text2+Chr(KeyAscii)KeyAscii=0:Text1=Text1+"*"EndSub‘文本框1中顯示“*”,文本框2中顯示原字符5.KeyDown和KeyUp的應(yīng)用用下面的程序段以十六進(jìn)制形式顯示鍵盤上各個鍵的keycode碼。

SubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger) PrintChr(KeyCode);"--";Hex(KeyCode)EndSub運行時,按下H鍵(不管大小寫),窗體上顯示“H--48”。例7.15將功能鍵Alt+F5設(shè)置為結(jié)束程序運行。功能鍵F5的掃描碼為vbkeyF5(符號常數(shù))先將KeyPreview屬性設(shè)置True,然后編制下列程序:PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyF5And(ShiftAnd4)ThenEndEndIfEndSub例7.16“錘打紅心”游戲①用上、下、左、右四個箭頭鍵控制“鐵錘” “”:37(&H25) “”:38(&H26) “”:39(&H27) “”:40(&H28)②如果Abs(Image1.Left-Image2.left<300)AndAbs(Image1.Top-Image2.Top<300)成立,則認(rèn)為是重疊,“鐵錘”錘打到“紅心”③用時鐘控件(Timer1)的Timer事件控制圖像框“紅心”的移動。Timer1的Interval屬性為200,即每1秒產(chǎn)生5個Timer事件7.10.3拖放“拖放”指的是用鼠標(biāo)把一個對象拖到另一個對象上,或拖到同一對象的另一個位置上。1.拖放過程將鼠標(biāo)指針移到源對象上----按下鼠標(biāo)左鍵,并拖動鼠標(biāo)到另一位置或目標(biāo)對象上----放開鼠標(biāo),源對象就被移動到了松開鼠標(biāo)時鼠標(biāo)指針?biāo)诘奈恢?.兩種拖放方式為使源對象能被拖放,須在源對象的MouseDown事件過程中設(shè)置源對象的DragMode屬性:DragMode=0手工拖放方式

DragMode=1自動拖放方式手工方式比自動方式可以提供更多控制。例如,手工方式允許指定對象可拖動的時間及不可拖動的時間,還可在開始拖動前識別MouseDown事件,從而記錄鼠標(biāo)的位置;而在自動方式下,總能拖動對象(1)自動拖放:只要將鼠標(biāo)置于需要拖動的對象上,按住左鍵不放,然后拖動鼠標(biāo)即可,但只有在OLE容器控件沒有焦點時,它才能自動地被拖動(2)手工拖放:將源對象的DragMode屬性設(shè)置為0,在按住鼠標(biāo)時必須在MouseDown事件中用Drag方法啟動“拖”操作3.拖放的實現(xiàn)拖放演示窗體上有圖形框picture1,裝有某個圖形,它能作為源對象被拖放到該窗體的某個地方。如果圖形框被拖動到“取消拖放”標(biāo)簽(label1)上方,則取消拖放操作。(1)手工拖放的實現(xiàn)步驟①將源對象的DragMode屬性設(shè)置為0(缺省值),可以在設(shè)計狀態(tài)的屬性窗口中設(shè)置,也可以在源對象的MouseDown事件中用賦值語句設(shè)置②在源對象的MouseDown事件中用Drag方法啟動拖操作

SubPicture1_MouseDown(Button%,Shif%,X!,Y!)Picture1.Drag1EndSub‘啟動拖操作③由于源對象在窗體內(nèi)移動,故目標(biāo)對象是窗體,在窗體的DragDrop事件中用Move方法編制代碼實現(xiàn)源對象的移動

SubForm_DragDrop(SourceAsControl,X!,Y!)Source.Move(X-Source.Width/2),(Y-Source.Height/2)EndSub

源圖形框被拖動到窗體的指定位置,且中央落在鼠標(biāo)指針位置上④根據(jù)題目要求,當(dāng)源對象拖放到標(biāo)簽Label1時,在Label1的DragOver事件中用Drag方法編碼,取消拖放操作SubLabel1_DragOver(SourceAsControl,X!,Y!,State%)Source.Drag0‘取消拖放操作

EndSub(2)自動拖放的實現(xiàn)步驟自動拖放可省去人工拖放中的第②步。無論是自動或人工拖放,當(dāng)鼠標(biāo)拖動到某一地方釋放時,都要在DragDrop事件中用Move方法實現(xiàn)移動;取消拖放時,要對DragOver事件用Drag方法取消拖動操作。4.拖放的屬性設(shè)置及方法(1)源對象的屬性設(shè)置 DragIcon屬性:拖動過程中顯示的圖標(biāo)(Ico或Cur文件)。

lblExample1.DragIcon=LoadPicture("C:\Icons\Mail.ico") lblExample2.DragIcon=picIcon.Picture(2)Drag拖放方法:啟動或停止手工拖動 當(dāng)DragMode為0時,需在源對象上用 [Object.]Drag參數(shù)來啟動或取消或結(jié)束拖動操作0:取消拖動操作1(缺省):開始拖動操作2:結(jié)束拖動操作DragMode屬性和Drag方法用來指定開始拖動的方法5.DragDrop和DragOver事件(1)DragOver事件在拖放操作正在進(jìn)行時引發(fā)。Object_DragOver(sourceAsControl,xAsSingle,yAsSingle,stateAsInteger)

source:正在被拖動的控件x,y:當(dāng)前鼠標(biāo)指針在目標(biāo)窗體或控件中的位置state:正被拖動的源對象的轉(zhuǎn)變狀態(tài)0=進(jìn)入(源控件正被向一個目標(biāo)范圍內(nèi)拖動)1=離去(源控件正被向一個目標(biāo)范圍外拖動)此事件可對鼠標(biāo)指針在一個有效目標(biāo)上的進(jìn)入、離開或停頓等進(jìn)行監(jiān)控。鼠標(biāo)指針的位置決定接收此事件的目標(biāo)對象,通常在開始拖動時,用DragOver事件過程來處理位于DragDrop事件前面的事件(2)DragDrop事件:當(dāng)源對象在拖動過程中鼠標(biāo)被釋放時,或使用Drag方法,且Drag參數(shù)值為2時被引發(fā)。Objiect_DragDrop(sourceAsControl,xAsSingle,yAsSingle)DragDrop事件過程用來控制在一個拖動操作完成時將會發(fā)生的情況。例如,可將源控件移到一個新的位置或?qū)⒁粋€文件從一個位置復(fù)制到另一個位置。當(dāng)source參數(shù)中可能使用多個控件時:應(yīng)使用TypeOf

關(guān)鍵字和If語句一起確定與source表示的控件的類型應(yīng)使用該控件的Tag屬性來標(biāo)識一個控件,然后使用DragDrop

事件過程例7.18窗體上有一個圖像框、一個標(biāo)簽和一個圖形框。用手工方式將圖像框Image1拖動到圖形框Picture1中,且圖像框小時,其中的圖片則保留在圖形框中;用自動方式將標(biāo)簽Label1拖動到圖形框Picture1中,并彈出“Error”的信息框。在拖動Image1時,其中的圖片作為拖動圖標(biāo)使用。①將Image1和Label1的DragMode屬性分別設(shè)置為0和1②在Image1_MouseDown事件中,用Drag方法啟動拖動操作,并將其中的圖片作為拖動圖標(biāo)DragIcon③在Picture1_DragDrop事件中,若源控件的類型為Image,則將Image1中的圖片裝入Picture1的Picture屬性中,并使Image1不可見;否則,用MsgBox()顯示“ERROR”7.10.4OLE拖放

可以將數(shù)據(jù)從一個控件或應(yīng)用程序中移動到另一個控件或應(yīng)用程序中。

1.OLE拖放的兩種方式

OLEDragMode(源控件設(shè)置) 0----Manual:缺省,手工1----Automatic:自動OLEDropMode屬性(目標(biāo)控件設(shè)置)0----None:缺省,目標(biāo)控件不接受“放”1----Manual:手工實現(xiàn)“放”操作2----Automatic:自動實現(xiàn)“放”完全支持自動OLE拖放:圖形框、圖像框和文本框支持自動“拖”操作,不支持自動“放”:組合框、列表框、文件列表框和目錄列表框沒有OLEDragMode,有OLEDropMode但不能設(shè)置為2:復(fù)選框、框架、單選按鈕、命令按鈕、標(biāo)簽、驅(qū)動器列表框和數(shù)據(jù)控件(Data)當(dāng)執(zhí)行OLE拖放操作時,在源端和目標(biāo)端會產(chǎn)生某些事件。無論拖放操作是自動操作還是手工操作,都總要生成與源對象關(guān)聯(lián)的事件。但是,只在手工拖放操作時才生成目標(biāo)端事件。2.OLE拖放的實現(xiàn)(1)完全自動拖放不需編程,若作為源對象,設(shè)置其OLEDragMode=1,若作為目標(biāo)對象,設(shè)置其OLEDropMode=2(2)自動拖、手工放作為源對象,設(shè)置其OLEDragMode=1,不必編程;若作為目標(biāo)對象,設(shè)置其OLEDropMode=1,并在其OLEDragDrop事件或OLEDragOver事件中編程OLEDragMode設(shè)為1(Automatic)OLEDropMode設(shè)為1(Manual)SubList2_OLEDragDrop(…)List2.AddItemData.GetData(vbCFText)EndSubSubLabel1_OLEDragDrop(…)Label1.Caption=Data.Files(1)EndSub例7.19手工方式實現(xiàn)從列表框到文本框OLE拖放,要求刪除源數(shù)。①啟動源對象的OLE拖動操作SubLabel1_MouseDown(…) '啟動OLE拖動操作,產(chǎn)生OLEStartDrag事件 Label1.OLEDragEndSub②源對象的實際拖動操作SubLabel1_OLEStartDrag(DataAsDataObject,AllowedEffectsAsLong) '將數(shù)據(jù)放到DataObject對象,并且指定數(shù)據(jù)格式 Data.SetDataLabel1.Caption,vbCFText '指定允許拖放效果 AllowedEffects=vbDropEffectMove EndSub③目標(biāo)對象的放操作SubText1_OLEDragDrop(DataAsDataObject,EffectAsLong,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle) ‘查詢DataObject中數(shù)據(jù)格式IfData.GetFormat(vbCFText)Then ‘從DataObject獲取數(shù)據(jù)Text1.Text=Data.GetData(vbCFText) EndIf Effect=vbDropEffectMoveEndSub④刪除源對象中的數(shù)據(jù)SubLabel1_OLECompleteDrag(EffectAsLong) IfEffect=vbDropEffectMoveThen Label1.Caption=“” '刪除原數(shù)據(jù) EndIfEndSub例7.20將“Windows資源管理器”中選定的一組文本文件,拖放到一個文本框中。

PrivateSubLabel1_OLEDragDrop(DataAsDataObject,EffectAsLong,ButtonAsIntege

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論