点击信息概述
有时,在应用程序中可能需要识别位于指定屏幕坐标上的元素。 例如,可能需要确定用户单击或双击了视图的哪个部分。 为达到此目的,每种视图类型都实现了 CalcHitInfo 方法。 此方法接受以网格控件客户区坐标为基准的特定的点作为 pt 参数,并且返回新创建的点击信息对象,此对象中包含了关于视图的相应元素的信息。
注意,不同视图类型有相应的点击信息对象。 因此 GridHitInfo 对象类型拥有关于网格视图内点击测试点的信息,CardHitInfo 对象对应于卡片视图,BandedGridHitInfo 类型对应于带区视图。 所有这些类型都派生于点击信息对象的基类 BaseHitInfo 类。
下面的插图展示了点击信息对象的继承层次结构。
任何特定的点击信息对象都通过许多属性公开了关于测试点的信息,这些属性可以划分为四个逻辑类别:
- 标识包含测试点的视图元素的属性 (例如,Band、Column、RowHandle 属性标识了其元素在测试点下面的带区、列和行);
- 标识测试点是否位于特定视图元素上面的属性 (例如 InCard、InColumnPanel 属性标识测试点是否在卡片和列面板上面);
- BaseHitInfo.HitPoint 属性,以相对于网格左上角的坐标表示测试点;
- HitTest 属性,标识位于测试点下面的元素的类型。
类型 | 成员 |
---|---|
CardHitInfo | CardHitInfo.HitTest (返回 CardHitTest 枚举成员之一) |
GridHitInfo | GridHitInfo.HitTest (返回 GridHitTest 枚举成员之一) |
BandedGridHitInfo | BandedGridHitInfo.HitTest (返回 BandedGridHitTest 枚举成员之一) |
在某些情况下,可能需要获取位于指定屏幕坐标上的视图。 要达到此目的,可以使用 GridControl.GetViewAt 方法。
示例
下面的示例代码展示了如何使用 GridView.CalcHitInfo 方法识别位于特定点的元素。
在本示例中,当鼠标移过网格控件时,调用了 CalcHitInfo 方法。 当前视图元素的名称被显示在窗体的标题中。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Base.ViewInfo; using DevExpress.XtraGrid.Views.Grid.ViewInfo; // ... private void gridControl1_MouseMove(object sender, MouseEventArgs e) { // Get a View at the current point. BaseView view = gridControl1.GetViewAt(e.Location); // Retrieve information on the current View element. BaseHitInfo baseHI = view.CalcHitInfo(e.Location); GridHitInfo gridHI = baseHI as GridHitInfo; if (gridHI != null) Text = gridHI.HitTest.ToString(); } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base Imports DevExpress.XtraGrid.Views.Base.ViewInfo Imports DevExpress.XtraGrid.Views.Grid.ViewInfo ' ... Private Sub GridControl1_MouseMove(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles GridControl1.MouseMove ' Get a View at the current point. Dim view As BaseView = gridControl1.GetViewAt(e.Location) ' Retrieve information on the current View element. Dim baseHI As BaseHitInfo = view.CalcHitInfo(e.Location) Dim gridHI As GridHitInfo = TryCast(baseHI, GridHitInfo) If Not gridHI Is Nothing Then Text = gridHI.HitTest.ToString() End If End Sub |