我正在使用包含组合框列的数据网格,但编辑此组合框(通过简单地单击它)有时会变得烦人,因为必须至少点击两次才能更改该字段的值。我想改变那种行为,所以我认为这很简单:只需创建一个OnMouseOver事件来选择鼠标组合框,但唯一可用的事件是Disposed one。
有没有办法改变这种行为?
答案 0 :(得分:2)
我刚刚处理了同样的问题,并通过将DataGridView.EditMode
设置为EditOnEnter
来解决此问题。
如果您不喜欢所有其他列的该行为,我发现this suggestion已放入CellEnter
事件:
if (DataGridView1.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn)
{
((DataGridViewComboBoxEditingControl)DataGridView1.EditingControl).DroppedDown = true;
}
我没有尝试过,但看起来很有希望。在this question上讨论了相同的技术。
答案 1 :(得分:0)
在Winforms中,DataGridView上有一个CellMouseEnter事件(以及一个用于非鼠标导航的CellEnter事件)。您可以使用它来设置所选单元格。
答案 2 :(得分:0)
你只获得Disposed事件的原因(我认为)是因为你试图走得太深。当我尝试一直到dataGridView1.Columns [“Column1”]时,我只得到Disposed事件......
相反,正如KeithS所提到的,您可以将CellMouseEnter事件分配给DataGridView。
从那里,您可以执行以下操作...
private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex==0 || e.ColumnIndex==2)
{
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
dataGridView1.BeginEdit(true);
}
}
if-statement就是为了展示如何将此功能限制到某些列,以防您需要。
if语句中的第一行设置当前单元格,第二行开始编辑过程。
这是一个通用的过程,可以使用任何类型的列,可以放入DataGridView。 DataGridView的EditMode无关紧要。
答案 3 :(得分:0)
这非常好用。 在datagridview的CellClick事件:
void datagridview1_CellClick(object sender, .Windows.Forms.DataGridViewCellEventArgs e){if (e.ColumnIndex > 0)
{
W1.dGVReports.CurrentCell = W1.dGVReports.Rows[e.RowIndex].Cells[e.ColumnIndex];
W1.dGVReports.BeginEdit(true);
(W1.dGVReports.EditingControl as System.Windows.Forms.DataGridViewComboBoxEditingControl).DroppedDown = true;
}
}