我想覆盖DataGridView标题/列单元格(顶部,左侧单元格)中鼠标单击的行为。该单元格会导致选择所有行。相反,我想阻止它选择所有行。我看到一个RowHeaderSelect和ColumnHeaderSelect的事件,但没有一个事件用于该顶部左侧标题单元格。
有什么想法吗?我只是在失明吗?
答案 0 :(得分:5)
这是单击该单元格时发生的错误代码:
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个解决方案:
继承您自己的数据网格并覆盖OnCellMouseDown
(类似这样)
protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == -1) return;
base.OnCellMouseDown(e);
}
答案 1 :(得分:1)
我知道这已经很晚了,但希望它会对某人有所帮助。下面的代码在类似的场景中对我有用。
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();
}
}
答案 2 :(得分:0)
使用此hack可以获得对click事件的一些控制权:)
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
}
}
答案 3 :(得分:0)
覆盖 OnCellMouseDown 方法:
if (e.ColumnIndex == -1 && e.RowIndex == -1)
{
return;
}
else
{
base.OnCellMouseDown(e);
}