![](/img/trans.png)
[英]How to add a menu item to the default right-click on the devexpress treelist
[英]How to Handle DevExpress GalleryItem Right Click?
今天,我正在開發一個程序,該程序需要我隔離用戶右鍵單擊DevExpress GalleryItem時引起的事件。 在查閱了論壇和文檔后,我對所提供的答案不滿意,“走開”感到有更好的答案。 問題不在於文檔不存在,而在於此問題的文檔嚴重分離,需要大量挖掘。 同樣,即使查閱了文檔,我仍然GalleryItemGroup
一個問題:“如何處理包含GalleryItemGroup
的GalleryControl
上的右鍵單擊事件?”
我的問題更加具體:“如何訪問光標下方的GalleryItem
?”
注意:我沒有以問答形式回答問題時提供最初問題的代碼,即我沒有導致我遇到上述問題的代碼
DevExpress提供了一種在這種情況下將很有幫助的工具。 通常,點擊事件是通過點擊測試算法在后台處理的,這需要一些技巧和思考(盡管算法和算法的邏輯相對簡單)。 本質上,所討論的代碼必須在事件發生時捕獲光標的位置,並將其與顯示的對象的位置進行比較-使用該比較所做的事情很復雜。
對我們來說幸運的是,DevExpress刪除了復雜的部分,提供了RibbonHitInfo
對象,該對象的文檔可以在這里找到(我鼓勵您單擊一下,這是非常有趣的東西)。 RibbonHitInfo
提供了許多實用程序,使點擊和底層對象的比較之后發生的事情變得非常容易。
該類的標准標識符為:
DevExpress.Xtrabars.Ribbon.ViewInfo.RibbonHitInfo
首先,在觸發mouseclick事件之后,您必須捕獲單擊的位置(在這種情況下,我正在利用MouseUp
事件。以下代碼需要牢記兩點:第一(1),我希望隔離右鍵單擊事件;其次(2),可以在整個Internet(MSDN,DevExpress,StackOverflow等)中找到鼠標事件函數標頭格式,這是我最初從中獲取它的地方。
Private Sub GalleryControl1_MouseRelease(ByVal sender As System.Object, ByVal MouseEvent As System.Windows.Forms.MouseEventArgs) Handles GalleryControl1.MouseUp
If e.Button = Windows.Forms.MouseButtons.Right Then
'Capture the location of the click:
Dim PointOfClick As Point = e.Location
End If
End Sub
上面的代碼有兩件事:首先, If e.Button =
語句評估哪個鼠標控件發送了事件; 其次,鼠標單擊的X和Y坐標被捕獲為Point
對象供以后使用。
接下來,我們必須確定點擊相對於我們要訪問的對象(在這里,我們處理GalleryItem
對象)的位置。 DevExpress為此提供了RibbonHitInfo
類。 我將顯示代碼,然后進行解釋。
注意:下面的代碼是對上面代碼的補充。
Private Sub GalleryControl1_MouseRelease(ByVal sender As System.Object, ByVal MouseEvent As System.Windows.Forms.MouseEventArgs) Handles GalleryControl1.MouseUp
If e.Button = Windows.Forms.MouseButtons.Right Then
'Capture the location of the click:
Dim PointOfClick As Point = e.Location
'Instantiate a RibbonHitInfo Object:
Dim HitInfo As RibbonHitInfo = GalleryControl1.CalcHitInfo(PointOfClick)
' Decide Where the PointOfClick is in Relationship to Other Objects
If HitInfo.InGalleryItem Then
' Do Something
End If
End If
End Sub
同樣,以上代碼做了兩(2)件事:首先,該代碼實例化RibbonHitInfo
對象(下面詳細說明); 其次,代碼通過利用可用的實用程序(或成員函數)評估RibbonHitInfo
對象(實際上是PointOfClick
)的位置。
為了實例化HitInfo
,我調用.CalcHitInfo()
函數,將Point
對象傳遞給調用的函數。 .CalcHitInfo(aPoint)
返回“ ...(在這種情況下)有關該位置GalleryControl元素的信息”。 對我來說,最簡單的方法是將RibbonHitInfo
對象視為一個Point
對象,該對象可以與其背后的其他對象進行交互(我知道這有點RibbonHitInfo
)。
HitInfo
具有DevExpress提供的許多成員函數,這些函數使我們能夠評估HitInfo
的位置。 在這種情況下,我想知道HitInfo
(或PointOfClick
,實際上)是否在GalleryControl1
包含的GalleryItem
對象中。 因此,代碼為: If HitInfo.InGalleryItem Then
。 通過所有DevExpress的榮耀, RibbonHitInfo
對象檢測-在單擊(?)時是否單擊了另一個對象。 同樣,在這種情況下,是GalleryItem
對象。
如果HitInfo
是您想要的地方,那么您可以做自己想做的! 但是,為了舉例(出於我的目的,在單擊下面訪問對象),我將提供一些代碼。 同樣,下面的代碼是上面的代碼的補充(盡管這次更多的是代碼段)。
' Decide Where the PointOfClick is in Relationship to Other Objects
If HitInfo.InGalleryItem Then
' To Access The Object Behind Hit Info:
Dim ClickedGalleryItem As GalleryItem = HitInfo.GalleryItem
End If
在這里,我能夠直接訪問GalleryItem
最初發現“背后”的對象PointOfClick
。 返回的GalleryItem
對象和ClickedGalleryItem
可以使用,就像它們是GalleryItem
對象一樣-因為它們是。 從這里,您可以訪問所需的任何屬性,方法等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.