我正在尝试修改为datagridview选择的方式,以便它以与文本选择类似的方式进行选择。
目前,当在多行中选择一系列单元格时,仅突出显示所选单元格。
然而,我想要做的是当第二行被选中时,它还选择第一个选定单元格右侧的所有单元格,并选择第二个选定单元格的所有单元格,与高亮显示完全相同浏览器中的文字。
我可以设置一些属性或模式来使datagridview选择的行为如下吗?
答案 0 :(得分:0)
您可以使用内置MonthCalendar控件:
Windows窗体MonthCalendar控件一次最多可显示12个月。默认情况下,控件仅显示一个月,但您可以指定显示的月数以及它们在控件中的排列方式。更改日历维度时,将调整控件的大小;所以请确保表格上有足够的空间用于新尺寸。
答案 1 :(得分:0)
您可以尝试捕捉鼠标,移动和提升事件以及自己处理选择。这适用于从上到下拖动,需要添加额外的逻辑来拖动另一个方向,但这对您来说应该是可行的。
{
dataGridView1.CellMouseDown += dataGridView1_CellMouseDown;
dataGridView1.CellMouseMove += dataGridView1_CellMouseMove;
dataGridView1.CellMouseUp += dataGridView1_CellMouseUp;
dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
}
int startRow;
int startColumn;
bool beginSelection;
void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
beginSelection = false;
}
void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
if (!beginSelection)
return;
dataGridView1.ClearSelection();
int curRow = e.RowIndex;
int curCol = e.ColumnIndex;
for (int r = startRow; r <= curRow; r++)
{
int maxC = dataGridView1.ColumnCount-1;
int minC = 0;
if (r == curRow)
maxC = curCol;
if (r == startRow)
minC = startColumn;
for (int c = minC; c <= maxC; c++)
{
dataGridView1[c,r].Selected = true;
}
}
}
void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
beginSelection = true;
startRow = e.RowIndex;
startColumn = e.ColumnIndex;
}