【问题标题】:Custom DataGridView Selection Mode自定义 DataGridView 选择模式
【发布时间】:2014-03-10 15:30:39
【问题描述】:

所以我到处搜索试图找到我的问题的答案,但每个人似乎都可以接受默认选择单元格的方式(在一个框中)。

我正在使用十六进制编辑器,目前将 SelectionMode 设置为默认 RowHeaderSelect 并将 MultiSelect 设置为 true。 我的问题是,当您单击一个单元格并拖动选择时,它会选择一个框形的单元格(如 excel)。这不是我需要它来选择单元格的方式。

我目前通过处理以下事件解决了这个问题,CellMouseDown、CellMouseEnter、CellMouseUp 和 MouseUp。 这为我提供了我正在寻找的选择,但默认框选择样式在拖动选择期间仍然存在。

此代码示例发生在 CellMouseUp 上,并提供了我正在寻找的选择样式。第一张照片是运行下面的代码 (CellMouseUp) 后我的选择的样子。第二张图片是您拖动时发生的情况(下面的代码在 CellMouseEnter 上运行,也可以在拖动时自定义选择),但它会产生这种取消选择整个列的视觉错误,因为它超出了默认选择框样式(excel 样式)。

编辑:在鼠标向上和鼠标向下发生后澄清选择工作 ( dgvMainBinary.ClearSelection() 然后代码如下) 这是在拖动过程中发生的视觉错误。我唯一能想到的是在我的 CellMouseEnter 事件之后运行的默认框选择模式。

任何帮助将不胜感激,谢谢。

        for (int row = startY; row <= endY; row++)
        {
            int startColumn = 0;
            int endColumn = 15;
            if (row == startY)
            {
                startColumn = startX;
                if (startY == endY)
                    endColumn = endX;
            }
            else if (row == endY)
            {
                endColumn = (endX < 16)?endX:15;
            }
            for (int column = startColumn; column <= endColumn; column++)
            {
                dgvMainBinary.Rows[row].Cells[column].Selected = true;
            }
        }

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    一种方法是清除MouseUp 事件处理程序中选定的单元格,并在清除DataGridView 默认逻辑完成的选择后执行您的选择逻辑。

    void dataGridView1_MouseUp(object sender, MouseEventArgs e)
    {            
        dataGridView1.ClearSelection();           
        // do your selection logic here
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2012-08-08
      • 2023-03-22
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多