HitTest根據(jù)指定的X、Y坐標(biāo)獲得相應(yīng)區(qū)域?qū)儆谀姆N類型。此方法在處理BeforeMouseDown事件時(shí)特別有用。它允許您確定鼠標(biāo)是否位于特定單元格、單元格按鈕、Resizing元素大小等上。
語法
名稱 |
描述 |
HitTest(Int32,Int32) | 返回有關(guān)控件曲面上指定點(diǎn)處控件的信息。 |
HitTest(Point) | 返回有關(guān)控件曲面上指定點(diǎn)處控件的信息。 |
HitTest() | 返回有關(guān)當(dāng)前鼠標(biāo)位置的控件的信息。 |
返回的是一個(gè)HitTestInfo結(jié)構(gòu),這個(gè)結(jié)構(gòu)里面有很多有用的信息。
名稱 |
描述 |
Column | 獲取測試點(diǎn)處列的索引(如果該點(diǎn)與單元格不對(duì)應(yīng),則返回-1)。 |
IsFooter | 獲取鼠標(biāo)是否位于頁腳上。 |
Point | 控件表面上的點(diǎn),以像素為單位。 |
Row | 獲取測試點(diǎn)的行索引(如果該點(diǎn)與單元格不對(duì)應(yīng),則返回-1)。 |
Type | HitTestTypeEnum枚舉類型,此屬性允許您確定點(diǎn)是對(duì)應(yīng)于網(wǎng)格單元還是對(duì)應(yīng)于特殊元素,如行標(biāo)題和列標(biāo)題、調(diào)整區(qū)域大小等。 |
X | 控件表面上點(diǎn)的X坐標(biāo),以像素為單位。 |
Y | 控件表面上點(diǎn)的Y坐標(biāo),以像素為單位。 |
HitTestTypeEnum枚舉
名稱 | 值 | 說明 |
None | 0 | 該點(diǎn)位于網(wǎng)格的空白區(qū)域。 |
Cell | 1 | 該點(diǎn)位于網(wǎng)格單元上。(單元坐標(biāo)存儲(chǔ)在和屬性中)。 |
ColumnHeader | 2 | 該點(diǎn)位于固定行上,位于列上。 |
ColumnResize | 3 | 該點(diǎn)位于列大小調(diào)整區(qū)域中固定單元格的右邊緣附近。 |
ColumnFreeze | 4 | 該點(diǎn)位于柱凍結(jié)區(qū)域中最后一個(gè)凍結(jié)柱的右邊緣附近。 |
RowHeader | 5 | 該點(diǎn)位于固定列上,緊鄰一行。 |
RowHeader | 6 | 該點(diǎn)位于行大小調(diào)整區(qū)域中固定單元格的底邊附近。 |
RowFreeze | 7 | 該點(diǎn)位于行凍結(jié)區(qū)域中最后一個(gè)凍結(jié)行的底部邊緣附近。 |
Checkbox | 8 | 這一點(diǎn)在復(fù)選框上。 |
EditButton | 9 | 該點(diǎn)位于編輯按鈕(下拉、彈出編輯器)上。 |
OutlineTree | 10 | 該點(diǎn)位于輪廓欄上(當(dāng)網(wǎng)格的屬性具有包含該標(biāo)志的標(biāo)記時(shí)可見)。 |
FilterIcon | 11 | 該點(diǎn)位于輪廓樹上的“折疊/展開”按鈕上(當(dāng)網(wǎng)格的屬性包含該標(biāo)志時(shí)可見)。 |
ExpressionIcon | 12 | 該點(diǎn)位于列標(biāo)題單元格的過濾器圖標(biāo)上。 |
PinIcon | 13 | 該點(diǎn)位于列標(biāo)題單元格上的表達(dá)式編輯器圖標(biāo)上。 |
在一些可以獲取到鼠標(biāo)坐標(biāo)的事件中,我們就可以利用HitTest方法來獲取到相應(yīng)的信息。比如BeforeMouseDown、MouseClick、MouseDoubleClick等等。
比如我們可以實(shí)現(xiàn)一個(gè)雙擊行標(biāo)題然后彈出相關(guān)信息的代碼。
Vb.Net
Public Sub SmGrid1_MouseDoubleClick(sender As Object,e As System.Windows.Forms.MouseEventArgs)
Dim tbl As SmGrid=sender
'獲得HitTestInfo結(jié)構(gòu)
Dim hit As HitTestInfo= tbl.HitTest(e.X,e.Y)
'如果當(dāng)前鼠標(biāo)點(diǎn)擊的位置位于行標(biāo)題
If hit.Type=HitTestTypeEnum.RowHeader Then
'彈窗顯示當(dāng)前鼠標(biāo)點(diǎn)擊位置的行號(hào)
MessageBox.Show("當(dāng)前行號(hào)為:"+ hit.Row)
'如果想顯示行標(biāo)題中的序號(hào)的話
If tbl.Rows(hit.Row).DataIndex>=0 Then
MessageBox.Show("當(dāng)前行標(biāo)題序號(hào)為:"+ tbl.Rows(hit.Row).DataIndex+1)
'另外一種獲得方法
MessageBox.Show("當(dāng)前行標(biāo)題序號(hào)為:"+ tbl.Rows(hit.Row).GetRowData().Index+1)
End If
End If
End Sub
C# |
public void SmGrid1_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) { SmGrid tbl = sender; // 獲得HitTestInfo結(jié)構(gòu) HitTestInfo hit = tbl.HitTest(e.X, e.Y); // 如果當(dāng)前鼠標(biāo)點(diǎn)擊的位置位于行標(biāo)題 if (hit.Type == HitTestTypeEnum.RowHeader) { // 彈窗顯示當(dāng)前鼠標(biāo)點(diǎn)擊位置的行號(hào) MessageBox.Show("當(dāng)前行號(hào)為:" + hit.Row); // 如果想顯示行標(biāo)題中的序號(hào)的話 if (tbl.Rows[hit.Row].DataIndex >= 0) { MessageBox.Show("當(dāng)前行標(biāo)題序號(hào)為:" + tbl.Rows[hit.Row].DataIndex + 1); // 另外一種獲得方法 MessageBox.Show("當(dāng)前行標(biāo)題序號(hào)為:" + tbl.Rows[hit.Row].GetRowData().Index + 1); } } } |