Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义DataGridView选择模式_C#_Winforms_Datagridview - Fatal编程技术网

C# 自定义DataGridView选择模式

C# 自定义DataGridView选择模式,c#,winforms,datagridview,C#,Winforms,Datagridview,所以我到处搜索,试图找到我的问题的答案,但每个人似乎都同意它默认选择单元格的方式(在一个框中) 我正在使用十六进制编辑器,当前SelectionMode设置为默认RowHeaderSelect,MultiSelect设置为true。 我的问题是,当您单击单元格并拖动“选择”时,它会选择长方体形状的单元格(如excel)。这不是我需要它来选择单元格的方式 我目前通过处理以下事件来解决这个问题:CellMouseDown、CellMouseEnter、CellMouseUp和MouseUp。 这为我

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

我正在使用十六进制编辑器,当前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;
            }
        }

for(int row=startY;row一种方法是清除
MouseUp
事件处理程序中的选定单元格,并在清除由
DataGridView
默认逻辑完成的选择后执行选择逻辑

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