![](/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.