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

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

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

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

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

關鍵詞:VB;拖放;坐標;API函數

中圖分類號:G642

文獻標識碼:B

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

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

1在同一容器內部拖放控件

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

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

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

Command1.Drag 1'開始拖動控件

End Sub

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

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

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

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

End Sub

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

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

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

2.1修改拖放坐標

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

首先給學生講解DragDrop事件中參數的含義,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修改容器對象

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

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

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

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

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

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

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

ByVal hWndNewParent As Long) As Long'使用前聲明API函數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

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

3結束語

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

參考文獻

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

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

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

主站蜘蛛池模板: 国产精品综合色区在线观看| 一级香蕉人体视频| 最新国产网站| 亚洲一区二区在线无码| Aⅴ无码专区在线观看| 亚洲天堂色色人体| 国产高清无码麻豆精品| 国产丝袜无码精品| 丰满人妻一区二区三区视频| 欧美日本一区二区三区免费| 亚洲国产91人成在线| 国产成人一二三| 极品尤物av美乳在线观看| 亚洲精品无码日韩国产不卡| 黄片一区二区三区| 国产av一码二码三码无码| 2021亚洲精品不卡a| 91久久青青草原精品国产| 免费无遮挡AV| 99re经典视频在线| 国产99热| 69av免费视频| 中美日韩在线网免费毛片视频| 国产精品欧美在线观看| 国产日韩丝袜一二三区| 国产成人精品一区二区免费看京| 蝌蚪国产精品视频第一页| 99久久精品免费观看国产| 中文字幕 日韩 欧美| 六月婷婷激情综合| 精品国产一区91在线| 国产老女人精品免费视频| 日韩成人在线一区二区| 久久综合AV免费观看| 亚洲欧美日韩色图| 久久青草免费91观看| 国产视频只有无码精品| 欧美特黄一级大黄录像| 久久国产精品波多野结衣| 亚洲av无码成人专区| 秋霞午夜国产精品成人片| 99久久精品美女高潮喷水| 日韩av无码DVD| 亚洲成人高清无码| 国内嫩模私拍精品视频| 精品一區二區久久久久久久網站| 国产一区二区三区视频| 99尹人香蕉国产免费天天拍| 毛片基地视频| 免费又爽又刺激高潮网址| 国产农村妇女精品一二区| 青青草国产免费国产| 动漫精品中文字幕无码| 国产黑丝视频在线观看| 亚洲中文制服丝袜欧美精品| 亚洲精品免费网站| 丰满的少妇人妻无码区| 久草视频一区| 在线亚洲小视频| 国产精品永久不卡免费视频| 午夜在线不卡| 久久久久久久久亚洲精品| 中文字幕在线视频免费| 亚洲日韩国产精品综合在线观看 | 97超碰精品成人国产| 久久久91人妻无码精品蜜桃HD| 亚洲日本在线免费观看| 国内自拍久第一页| 久久久噜噜噜| 无码又爽又刺激的高潮视频| 国产精品无码影视久久久久久久| 久久婷婷六月| 91九色视频网| 精品久久综合1区2区3区激情| 国内精品视频在线| 激情视频综合网| av大片在线无码免费| 天天躁夜夜躁狠狠躁躁88| 国产在线观看一区精品| 欧美成人日韩| 狠狠色丁香婷婷| 99精品视频在线观看免费播放|