簡體   English   中英

如何處理DevExpress GalleryItem右鍵單擊?

[英]How to Handle DevExpress GalleryItem Right Click?

今天,我正在開發一個程序,該程序需要我隔離用戶右鍵單擊DevExpress GalleryItem時引起的事件。 在查閱了論壇和文檔后,我對所提供的答案不滿意,“走開”感到有更好的答案。 問題在於文檔不存在,而在於此問題的文檔嚴重分離,需要大量挖掘。 同樣,即使查閱了文檔,我仍然GalleryItemGroup一個問題:“如何處理包含GalleryItemGroupGalleryControl上的右鍵單擊事件?”

我的問題更加具體:“如何訪問光標下方的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對象供以后使用。

實例化RibbonHitInfo對象

接下來,我們必須確定點擊相對於我們要訪問的對象(在這里,我們處理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在您想要的地方該怎么辦

如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM