首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DataGridView覆盖顶部、左侧标题单元格单击(全选)

DataGridView覆盖顶部、左侧标题单元格单击(全选)
EN

Stack Overflow用户
提问于 2009-10-01 15:25:18
回答 4查看 8.4K关注 0票数 3

我想覆盖鼠标在DataGridView标题/列单元格(顶部、左侧单元格)中单击时的行为。该单元格会使所有行都被选中。相反,我想阻止它选择所有行。我看到了用于RowHeaderSelect和ColumnHeaderSelect的事件,但没有用于左上角标题单元格的事件。

有什么想法吗?我只是个盲人吗?

EN

回答 4

Stack Overflow用户

发布于 2009-10-29 03:04:37

这是当您单击该单元格时发生的情况的dissasembled代码:

代码语言:javascript
运行
复制
private void OnTopLeftHeaderMouseDown()
{
    if (this.MultiSelect)
    {
        this.SelectAll();
        if (-1 != this.ptCurrentCell.X)
        {
            this.SetCurrentCellAddressCore(this.ptCurrentCell.X, this.ptCurrentCell.Y, false, false, false);
        }
    }

为了防止这种行为,您有两种解决方案:

  1. 禁用多选(如果您的业务逻辑覆盖您自己的datagrid并覆盖OnCellMouseDown (如下所示)

protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) { if (e.RowIndex == -1 && e.ColumnIndex == -1) return;base.OnCellMouseDown(e);}

票数 5
EN

Stack Overflow用户

发布于 2015-09-02 00:16:03

我知道为时已晚,但希望这能帮助到一些人。下面的代码在类似的场景中适用于我。

代码语言:javascript
运行
复制
    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();
        }
     }
票数 1
EN

Stack Overflow用户

发布于 2009-11-17 03:36:10

您可以使用以下hack获得对单击事件的一些控制:)

代码语言:javascript
运行
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1504620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档