我想覆盖鼠标在DataGridView标题/列单元格(顶部、左侧单元格)中单击时的行为。该单元格会使所有行都被选中。相反,我想阻止它选择所有行。我看到了用于RowHeaderSelect和ColumnHeaderSelect的事件,但没有用于左上角标题单元格的事件。
有什么想法吗?我只是个盲人吗?
发布于 2009-10-28 19:04:37
这是当您单击该单元格时发生的情况的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);
}
}
为了防止这种行为,您有两种解决方案:
OnCellMouseDown
(如下所示)protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) { if (e.RowIndex == -1 && e.ColumnIndex == -1) return;base.OnCellMouseDown(e);}
发布于 2015-09-01 16:16:03
我知道为时已晚,但希望这能帮助到一些人。下面的代码在类似的场景中适用于我。
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();
}
}
发布于 2009-11-16 19:36:10
您可以使用以下hack获得对单击事件的一些控制:)
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
}
}
https://stackoverflow.com/questions/1504620
复制