- 1 控件的不同部分
- 2 添加控件節(jié)點(diǎn)
- 3 當(dāng)父節(jié)點(diǎn)處于展開狀態(tài)時(shí)添加節(jié)點(diǎn)
- 4 刪除控件節(jié)點(diǎn)
- 5 展開與收縮節(jié)點(diǎn)
- 6 為節(jié)點(diǎn)選擇圖片
- 7 實(shí)現(xiàn)拖放
- 8 給控件增加一列
- 9 定義列數(shù)據(jù)類型
- 10 顯示工具條
- 11 添加節(jié)點(diǎn)副文本
- 12 在一個(gè)節(jié)點(diǎn)內(nèi)編輯文本
- 13 樹型控件排序
- 14 給節(jié)點(diǎn)添加檢查框與選項(xiàng)按鈕
- 15 虛模式
- 16 錯(cuò)誤信息
- 17 事件
- 18 方法
- 19 屬性
實(shí)現(xiàn)拖放
- 2017-09-15 14:58:24
- 黃善超
- 3524
- 最后編輯:tmtony8 于 2017-09-15 15:24:52
拖進(jìn)控件
如果主語言支持在OLE控件內(nèi)拖放,ctTree控件只支持施放操作。象VB和Delphi這類語言將自動(dòng)對(duì)一個(gè)OLE控件捆綁DragOver和DragDrop事件。在控件內(nèi)這些事件用于支持拖放。
拖放消息必須由主語言提供然后發(fā)送至控件拖放方法。
例如, 開始一個(gè)拖放操作,我們一定首先開始主語言控件提供的拖動(dòng)事件。下例使用VB作為主語言。
Private Sub ctTree1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) ctTree1.DragOver (Y / Screen.TwipsPerPixelY), State End Sub
在這例中,我們把鼠標(biāo)指針的Y坐標(biāo)與當(dāng)前拖動(dòng)狀態(tài)變量發(fā)送給拖動(dòng)方法,這將讓控件在適當(dāng)?shù)墓?jié)點(diǎn)周圍畫拖拽線。我們也能把Y值從點(diǎn)值轉(zhuǎn)為像素值。依靠你的開發(fā)語言,這也許是必需的. ctTree 使用像素決定該如何繪制自身。
注意:拖動(dòng)方法不需要鼠標(biāo)指標(biāo)的X坐標(biāo),因?yàn)楣?jié)點(diǎn)是水平方式放置的 (一個(gè)在另一個(gè)的頂端)。 因因此項(xiàng)目放入控件與X坐標(biāo)是無關(guān)的,在拖放事件中我們必須截獲消息。例:
Private Sub ctTree1_DragDrop(Source As Control, X As Single, Y As Single) ctTree1.DragDrop (Y / Screen.TwipsPerPixelY) End Sub
由這段消息,我們告知控件在某個(gè)Y坐標(biāo)一個(gè)項(xiàng)目拖進(jìn)控件。 當(dāng)我們執(zhí)行它時(shí),控件將觸發(fā)控件自已的DropNode(拖放節(jié)點(diǎn))事件,那兒會(huì)報(bào)告在什么節(jié)點(diǎn)項(xiàng)目被拖入。
注意:在上例的代碼段中,Y坐標(biāo)總是被Screen.TwipsPerPixelY除。這是因?yàn)閂B使用邏輯單元傳遞所有消息,此處控件使用像素作為它的大小單元。大小消息來自諸如高,寬,頂端與左端等。因此, 我們不得不在發(fā)送它至控件前把所有大小消息從邏輯單元轉(zhuǎn)換為像素。在象Delphi這類的語言中,不需要這么做因?yàn)樗材芤韵袼貍鞔笮∠ⅰ⒖贾髡Z言用戶手冊(cè)以決定是否OLE控件支技拖放,并且語言如何傳遞它的大小消息。
注意: 在示例或代碼中,在用到"DragDrop" 與 "DragOver"作為保留字的地方,ctDragDrop 和 ctDragOver 方法可以分別代替DragDrop與DragOver。
拖出控件
也有可能從控件中拖出列表項(xiàng)。為實(shí)現(xiàn)它,在一個(gè)列表項(xiàng)目上點(diǎn)擊并拖動(dòng), 一旦拖動(dòng)發(fā)生,StartDragOut 事件將會(huì)被觸發(fā)。那時(shí)你就能把控件置于拖動(dòng)模式并開始拖動(dòng)操作。以下VB代碼示范如何處理它:
Private Sub ctTree_StartDragOut() ctTree.Drag vbBeginDrag End Sub