c# - DataGridView 行选择器(记录选择器)实际上不选择
问题描述
var hit = dataGridView1.HitTest(e.X, e.Y);
int rowHit = hit.RowIndex;
dataGridView1.ClearSelection();
dataGridView1.Rows[rowHit].Selected = true;
这是我的代码,但是当我单击鼠标右键时它会选择该行,但记录选择器箭头不会更改为当前选定的行。仅当我单击鼠标左键时,记录选择器箭头才会更改。我希望当我单击右键或左键时,选择器会发生变化。我该如何解决这个问题?
解决方案
目前尚不清楚发布的代码在哪里执行。我猜在网格MouseDown
事件中?
当您“左键”单击网格中的一个单元格时,它会变为“选中”,并且您所描述的“记录选择器”会移动到网格中的该行。所以调用 gridsHitTest
方法来查找单元格的行和列索引,并将行设置Selected
为将“记录选择器”移动到该行......是多余的,因为网格会以任何方式执行此操作。
当您“右键”单击一个单元格时,显然这一切都不会发生。
目前尚不清楚您要在这里完成什么,但是,可能有帮助的一件事是了解网格CurrentCell
不一定总是网格“选定”单元格。无论网格CurrentCell
是什么行……都是将显示“记录选择器”的行。
因此,在发布的代码中,您可以将以下几行添加到发布的代码中,它应该更改“记录选择器”下“鼠标右键”单击的行。
int colHit = hit.ColumnIndex;
dataGridView1.CurrentCell = dataGridView1.Rows[rowHit].Cells[colHit];
这应该可行,但如前所述,当用户“左”单击网格时,这是多余的。此外,HitTest
如果您订阅了 gridsCellMouseClick
事件,则似乎没有必要使用网格。在这种情况下,我们将知道单击了哪个单元格,我们可以简单地检查一下“哪个”鼠标按钮被单击了。在这种情况下,我们会寻找“右键”鼠标单击,然后CurrentCell
使用上面的代码简单地将网格更改为该单元格。像……</p>
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
if (e.Button == MouseButtons.Right) {
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
}
}
我希望这是有道理的。
推荐阅读
- apache-kafka - ConcurrentKafkaListenerContainerFactory 中 kafka.concurrency 的默认值是多少?
- c# - 如何在 Simple Injector 中使用 Ninject 的命名绑定?
- ios - Swift 中的动画显示和隐藏视图
- r - 什么是`数组错误(NA,c(J,K)):'dims'的长度不能为0`表示?
- react-native - StackNavigator 中 createMaterialTopTabNavigator 中的自定义 HeaderTitle
- reactjs - 更新 React 组件中前导空格的状态
- apache-kafka - 如何编码以将数据永久存储在 Kafka 中?
- javascript - (单击)操作在 [innerHTML] Angular 内部不起作用
- java - 错误:线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:10
- go - sync.Pool 比使用 channel 慢很多,那我们为什么要使用 sync.Pool 呢?