我有一個DataGridView我根據組號分組的行。為了在視覺上分離不同組的行,我設定DividerHeight了某個組中最后一行的 。
我想為行分隔符和行本身的滑鼠事件實作不同的行為。DataGridView.HitTestInfo似乎沒有辦法檢查這一點。有什么方法可以讓我找出是否單擊了行分隔符或是否有任何東西掉在上面?
我的網格外觀的影像。(深灰色區域是行分隔符):

uj5u.com熱心網友回復:
DataGridView HitTest()方法回傳與指定客戶端坐標(相對于 DataGridView 客戶端區域的坐標)處的 Row 相關的資訊。
您可以使用MouseDownDataGridView 的事件來確定滑鼠坐標(MouseEventArgs已經回傳相對于控制元件客戶端區域的滑鼠坐標)。
如果 Hit Test 成功,您可以使用它的RowIndexProperty 來確定滑鼠指標下 Row 的邊界,呼叫DataGridView.GetRowDisplayRectangle()
使用此資訊,您可以比較滑鼠指標相對于行邊界的位置以及分隔線占用的區域
。分隔線是行的邊界矩形的一部分
[Row].DividerHeight從該值中減去分隔線 ( )的高度,[Row].Bounds.Bottom并驗證滑鼠Y位置是否大于該值。
例如:
private void someDataGridView_MouseDown(object sender, MouseEventArgs e)
{
var dgv = sender as DataGridView;
var test = dgv.HitTest(e.X, e.Y);
if (test.RowIndex == -1) return;
var row = dgv.Rows[test.RowIndex];
var rowBounds = dgv.GetRowDisplayRectangle(test.RowIndex, false);
bool isDivider = e.Y >= (rowBounds.Bottom - row.DividerHeight);
}
如果定制噴漆到位,可根據需要進行調整
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522157.html
