我要重写在DataGridView头/列单元格(顶部,左侧细胞)鼠标点击的行为。 这细胞导致选择所有行。 相反,我想从选择的所有行停止。 我看到RowHeaderSelect和ColumnHeaderSelect的事件却没有一个为顶部,左侧头部单元。
有任何想法吗? 难道只是我瞎了吗?
我要重写在DataGridView头/列单元格(顶部,左侧细胞)鼠标点击的行为。 这细胞导致选择所有行。 相反,我想从选择的所有行停止。 我看到RowHeaderSelect和ColumnHeaderSelect的事件却没有一个为顶部,左侧头部单元。
有任何想法吗? 难道只是我瞎了吗?
这是当您单击该单元格会发生什么dissasembled代码:
private void OnTopLeftHeaderMouseDown()
{
if (this.MultiSelect)
{
this.SelectAll();
if (-1 != this.ptCurrentCell.X)
{
this.SetCurrentCellAddressCore(this.ptCurrentCell.X, this.ptCurrentCell.Y, false, false, false);
}
}
为了让您能够阻止这种行为,你有2个解决方案:
继承自己的DataGrid和覆盖OnCellMouseDown
(像这样)
protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) { if (e.RowIndex == -1 && e.ColumnIndex == -1) return; base.OnCellMouseDown(e); }
我知道这是迟,但希望这将帮助别人。 下面的代码在类似的情况为我工作。
private void MyDataGridView_MouseUp(object sender, MouseEventArgs e)
{
DataGridView.HitTestInfo hitInfo = this.MyDataGridView.HitTest(e.X, e.Y);
if (hitInfo.Type == DataGridViewHitTestType.TopLeftHeader)
{
MyDataGridView.ClearSelection();
}
}
您可能获得对使用这个技巧的单击事件的一些控制:)
private void dataGridView1_Click(object sender, EventArgs e)
{
MouseEventArgs args = (MouseEventArgs)e;
DataGridView dgv = (DataGridView)sender;
DataGridView.HitTestInfo hit = dgv.HitTest(args.X, args.Y);
if (hit.Type == DataGridViewHitTestType.TopLeftHeader)
{
// do something here
}
}