如何让Datagridview中readonly=true的列在编辑时不接受Tab键?

lincon77 2006-05-28 09:38:03
如有3列:ID,Name,Age
其中Age列的readonly=true,现想在录入或修改数据时,当录完Name的值后按Enter或按Tab或按向右光标键后能使下一行的ID列成为活动 Cell,而不是Age列得到焦点。
我知道DataGrid可以,this.dataGrid1.CurrentCell=new DataGridCell(row,col);
但在DataGridView中不知怎么实现,请大家帮忙看看。
...全文
283 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lincon77 2006-05-31
  • 打赏
  • 举报
回复
我放到CellLeave事件中后报StackOverflowException错,你测试过能工作吗?
Knight94 2006-05-30
  • 打赏
  • 举报
回复
你跟踪一下,如下这句是否执行到了
dataGridView1.CurrentCell=dataGridView1[0,0];
lincon77 2006-05-30
  • 打赏
  • 举报
回复
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == dataGridView1.Rows.Count - 1 && e.ColumnIndex == dataGridView1.Columns.Count - 1)
{

dataGridView1.CurrentCell=dataGridView1[0,0];
}
else
{
SendKeys.Send("{TAB}");
}
}
Knight94 2006-05-30
  • 打赏
  • 举报
回复
to 执行会报个错,说导致ChangeCellAddressCore函数据入口被重复调用

你把这部分
if (e.RowIndex == dataGridView1.Rows.Count - 1 && e.ColumnIndex == dataGridView1.Columns.Count - 1)
{
dataGridView1.CurrentCell=dataGridView1[0,0];
}
放到CellLeave事件中去做
lincon77 2006-05-30
  • 打赏
  • 举报
回复
执行会报个错,说导致ChangeCellAddressCore函数据入口被重复调用
Knight94 2006-05-29
  • 打赏
  • 举报
回复
to 能否给两行代码,我试了好象不工作

你如何写的
lincon77 2006-05-29
  • 打赏
  • 举报
回复
Knight94,能否给两行代码,我试了好象不工作。
Knight94 2006-05-28
  • 打赏
  • 举报
回复
要么在name列进行处理事件,即捕获到enter或者tab转发到下一ID列;
要么在ID列进行处理事件,即捕获到enter或者tab,然后再用sendkey进行转发。
Knight94 2006-05-28
  • 打赏
  • 举报
回复
这就不好做了,毕竟在当前窗体中,可能还有其他control,会被tab键进行切换。

但你可以在cellenter事件中,判断一下当前row是否为最后一行,如果是的话,不转发按键,而直接去定位到第一行。
lincon77 2006-05-28
  • 打赏
  • 举报
回复
我现在做的是在CellEnter事件中用SendKey转发,但是到到最后一个单元格后怎么转到第一个单元格中去呢?

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧