當您執行使用HitTest
方法上DataGridView
命中測試,結果HitTestInfo
包含一個名爲typeInternal
內場,其中包含有關命中測試結果的附加信息你需要。該字段的類型是內部枚舉。您的使用Reflection
得到內部字段的值,並將其轉換爲一個枚舉包含預期值是這樣的:
private enum DataGridViewHitTestTypeInternal
{
None,
Cell,
ColumnHeader,
RowHeader,
ColumnResizeLeft,
ColumnResizeRight,
RowResizeTop,
RowResizeBottom,
FirstColumnHeaderLeft,
TopLeftHeader,
TopLeftHeaderResizeLeft,
TopLeftHeaderResizeRight,
TopLeftHeaderResizeTop,
TopLeftHeaderResizeBottom,
ColumnHeadersResizeBottom,
ColumnHeadersResizeTop,
RowHeadersResizeRight,
RowHeadersResizeLeft,
ColumnHeaderLeft,
ColumnHeaderRight
}
protected override void OnMouseDown(MouseEventArgs e)
{
var info = this.HitTest(e.X, e.Y);
var typeInternal = info.GetType().GetField("typeInternal",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
var value = (DataGridViewHitTestTypeInternal)typeInternal.GetValue(info);
/* Then decide based on value */
// Rest of logic
base.OnMouseDown(e);
}
我編輯的職位,並刪除其中做了讀書的問題很難不必要的代碼,只是保留了最重要的部分的代碼,使這篇文章對未來的讀者更有用。那些對OP發佈的其他代碼感興趣的人可以在[revisions](http://stackoverflow.com/posts/38384611/revisions)中找到原文。 –