亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        VB中控件拖放操作的教學研究

        2008-12-31 00:00:00白晨希張亞歌
        計算機教育 2008年12期

        文章編號:1672-5913(2008)12-0097-03

        摘要:在VB教學中,拖放操作是一個難點內(nèi)容。本文介紹在教學過程中如何講解通過修改拖放坐標和使用API函數(shù),實現(xiàn)在不同容器之間拖放控件的操作,并給出了實例程序。

        關鍵詞:VB;拖放;坐標;API函數(shù)

        中圖分類號:G642

        文獻標識碼:B

        在Visual Basic應用程序中,為了實現(xiàn)更加靈活的用戶控制,時常需要由用戶自己安排一些控件的位置。在Windows操作系統(tǒng)中,經(jīng)常使用拖動操作移動或復制文件;在一些應用程序中,可將工具欄中的控件按鈕拖放到文檔窗口中,實現(xiàn)插入對象操作;在Office軟件中,還可以隨意定制工具欄中的按鈕。

        在我多年的VB一線教學實踐中,發(fā)現(xiàn)拖放操作的講解難點在于拖放的目標位置設置。在拖放控件時,根據(jù)源位置和目標位置的容器控件不同分為兩種情況:在同一容器對象中拖放控件,在不同容器對象中拖放控件。學生對于在不同容器中拖放控件有很多疑問,因此我在教學中采用了由淺入深、循序漸進的方法,分別講解這兩種情況的處理方法,并通過典型的實例讓學生掌握拖放操作的相關概念和實現(xiàn)方法,收到了不錯的效果,學生感覺比較容易理解,下面具體介紹一下這兩種情況拖放操作的實現(xiàn)方法。

        1在同一容器內(nèi)部拖放控件

        在教學過程中,我首先講解拖放操作的相關概念,然后舉例介紹與拖放操作相關的屬性、方法和事件。拖放(Drag)操作是指在窗體中,將鼠標指針指向控件,按住鼠標按鍵移動鼠標,到達目標位置后松開鼠標按鍵,被拖放的控件移動到目標位置[1]。

        在同一容器中拖放控件比較容易實現(xiàn),可以通過設置控件的拖放屬性,或調(diào)用控件的Drag方法來實現(xiàn)。在教學過程中以命令按鈕(CommandButton)控件為例,在窗體上添加一個命令按鈕Command1,設置DragMode屬性為1-Automatic(自動拖放),運行程序后用鼠標左鍵拖動命令按鈕,可以看到拖動時顯示灰色控件邊框,但控件并不真正移動到目標位置。若設置DragMode屬性為0-Manual(手動拖放),則需要編寫命令按鈕的MouseDown事件調(diào)用其Drag方法,事件過程的代碼如下:

        Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

        Command1.Drag 1'開始拖動控件

        End Sub

        運行程序時演示拖放操作,讓學生看到兩種設置方法的效果相同,使學生了解DragMode屬性的含義和Drag方法的用法。

        為了真正實現(xiàn)控件的移動,還需要編寫窗體的DragDrop事件過程,通過調(diào)用命令按鈕的Move方法使其移動到目標位置。DragDrop事件過程的代碼如下:

        Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

        Source.Move X, Y'把命令按鈕移到目標位置

        End Sub

        在程序運行時可以看到,拖放命令按鈕時能夠將其移動到目標位置。

        2在不同容器之間拖放控件

        上述的方法雖然可以改變控件的位置,但是控件的源位置和目標位置都是窗體,不能把控件從一個容器對象移到另一容器對象。為了實現(xiàn)控件在不同容器之間的拖放操作,可以通過修改坐標和修改容器對象的方法實現(xiàn)。

        2.1修改拖放坐標

        在教學過程中,要給學生強調(diào)目標位置坐標的設置方法。還以命令按鈕為例,在窗體上添加一個圖片框(PictureBox)控件Picture1,由于窗體和圖片框都是容器對象,可以嘗試通過修改對象的坐標,將命令按鈕從窗體上拖放到圖片框上。

        首先給學生講解DragDrop事件中參數(shù)的含義,Source表示被移動的控件對象,X和Y表示被拖動控件的停放位置,并通過畫示意圖讓學生了解在不同容器之間拖放控件時坐標的變化。DragDrop事件中的控件停放坐標X和Y是指在本容器中的坐標,當命令按鈕在窗體中移動時,坐標X和Y是相對于窗體而言的,而當命令按鈕被拖放到圖片框中時,坐標X和Y是相對于圖片框而言的。如果仍舊使用Source.Move X, Y語句,則命令按鈕無法移到目標位置。因此需要考慮命令按鈕在圖片框中的坐標與在窗體中的坐標之間的關系,即需要設置坐標的偏移,修改拖放坐標的程序代碼如下:

        Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)

        '計算得到控件在圖片框中的停放坐標

        Source.Move X + Picture1.Left, Y + Picture1.Top

        End Sub

        運行此程序可以看到,拖放命令按鈕能夠將控件從窗體上移動到圖片框上。

        2.2修改容器對象

        上述程序仍有一些弊端,就是當圖片框位于命令按鈕下層時,可以將命令按鈕移動到圖片框上,但當圖片框的疊放次序位于命令按鈕上層時,移動命令按鈕到圖片框時,命令按鈕會被圖片框覆蓋。也就是說,修改拖放坐標的方法可以把命令按鈕移動到圖片框之上,卻無法將命令按鈕移動到圖片框之中。為了實現(xiàn)將控件拖放到不同容器對象中的功能,需要修改控件的容器對象。

        在VB的開發(fā)環(huán)境中,沒有提供在程序運行時建立窗口及控件之間嫡屬關系的方法和手段,因此要實現(xiàn)上面要求的功能,需要補充一點動態(tài)建立窗口及控件之間嫡屬關系的能力。解決這個問題的方法是借助Windows系統(tǒng)調(diào)用,即使用API函數(shù)。

        API(應用程序接口)是操作系統(tǒng)自帶的一套功能強大的函數(shù)集,Windows API直接面對操作系統(tǒng)底層,可以實現(xiàn)VB所不能實現(xiàn)的功能。Visual Basic 6.0支持約1500個API函數(shù),主要包括在3個DLL中,其中User32.dll中的函數(shù)主要用于窗口管理,SetParent函數(shù)就是其中一個函數(shù)[2]。

        由于API函數(shù)不屬于教學大綱的要求,因此在教學過程中可以簡要介紹API函數(shù)的相關知識,只需舉例講解SetParent函數(shù)的含義和用法。

        SetParent函數(shù)可以用來在程序運行時刻,動態(tài)建立兩個容器對象及控件之間的嫡屬關系。SetParent函數(shù)接收兩個參數(shù),第一個參數(shù)是子對象的句柄,第二個參數(shù)是父對象的句柄,若兩個參數(shù)都是合法的句柄,則函數(shù)調(diào)用成功,為兩者之間建立起嫡屬關系[3]。

        在本例中,當將命令按鈕從窗體拖放到圖片框時,父對象是圖片框;當從圖片框拖放到窗體時,父對象是窗體。因此需要根據(jù)鼠標拖放時的方向設置不同的父對象,在DragOver事件中,可用If語句來判斷鼠標拖放的方向。另外,需要給學生強調(diào)在使用SetParent函數(shù)時,需要先聲明再使用,如果只在窗體模塊中使用,就在窗體代碼的通用部分聲明。相應的程序代碼如下:

        Private Declare Function SetParent Lib \"User32\" (ByVal hWndChild As Long, _

        ByVal hWndNewParent As Long) As Long'使用前聲明API函數(shù)SetParent

        Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

        If Button = 1 Then Command1.Drag 1'如果按下的是左鍵則開始拖放

        End Sub

        Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

        Source.Move X, Y

        End Sub

        Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)

        Source.Move X, Y

        End Sub

        Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)

        '當進入圖片框時把圖片框設置為容器對象

        If State = 0 Then SetParent Command1.hWnd, Picture1.hWnd

        '當進入窗體時把窗體設置為容器對象

        If State = 1 Then SetParent Command1.hWnd, Form1.hWnd

        End Sub

        上面的程序能夠實現(xiàn)在同一個窗體中的不同容器對象之間拖放控件。若對程序再做改進,還可以實現(xiàn)在不同窗體之間拖放控件。

        3結束語

        本文介紹了VB教學過程中鼠標拖放操作的有關問題,通過實例探討了拖放操作由簡單到復雜的實現(xiàn)過程,達到了理想的教學效果,學生能夠更深刻地理解拖放操作的本質(zhì),更容易掌握拖放操作的實現(xiàn)方法。本文中的程序經(jīng)過反復調(diào)試,僅用來驗證拖放操作,并不是完整的應用程序,在開發(fā)實際應用程序時,還需要擴展程序功能,可將此作為大作業(yè)留給學生們課余時間完成。

        參考文獻

        [1] 申石磊,張東生. Visual Basic程序設計[M]. 北京:中國科學技術出版社,2007:237-241.

        [2] 求是科技. Visual Basic 6.0程序設計與開發(fā)技術大全[M]. 北京:人民郵電出版社,2005:212-216.

        [3] 張智群. 在VB應用程序中實現(xiàn)動態(tài)控件移動[J]. 計算機世界報,1997,(18).

        在线观看亚洲精品国产| 被三个男人绑着躁我好爽视频| 国产白丝无码视频在线观看| 亚洲天堂资源网| 久久久亚洲精品蜜臀av| 在线观看国产成人av天堂野外| 又色又爽又黄还免费毛片96下载| 免费一级毛片在线播放不收费| 成人av天堂一区二区| 少妇被按摩出高潮了一区二区| 国产伦精品免编号公布| 亚洲av日韩精品久久久久久| 久久综合一本中文字幕| 国产亚洲熟妇在线视频| 天堂网在线最新版www| 欧美乱妇日本无乱码特黄大片| 中文字幕一区二区三在线| 日本久久精品中文字幕| 久久国产精品久久久久久| 国产精品毛片无码久久| 日韩精品一区二区三区视频| 亚洲中文字幕日产无码| 亚洲精品中文字幕无码蜜桃| 久久精品国产72国产精福利 | 蜜桃一区二区三区| 男人天堂网在线视频| 日本最新一区二区三区视频| 人妻少妇中文字幕在线观看| 亚洲av成人无码网站…| 白白色发布在线播放国产| 日本av一区二区在线| 午夜爽爽爽男女污污污网站 | 99国产精品久久久蜜芽| 欧美在线观看一区二区| 亚洲综合av一区在线| 97一期涩涩97片久久久久久久 | 精品国产a∨无码一区二区三区| 久久婷婷免费综合色啪| 亚洲国产精品av在线| 欧美巨大巨粗黑人性aaaaaa| 国产成社区在线视频观看|