C# C/S datagridview问题 高手请进(焦点问题)

moonzap 2009-06-10 10:47:06
如果C# datagridview中选中一个Cell.按TAB或点击, 使当前单元格不变,也就是不要让焦点自动移到下一个单元格..

如何实现
...全文
109 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonzap 2009-06-30
  • 打赏
  • 举报
回复
以上提供的方法都不行,呵呵
最后想了个方法,在CellValidating事件里面,进行一切必须要的操作,然后使用e.cancel = true进行控制就OK了
friend555 2009-06-22
  • 打赏
  • 举报
回复
学习
ds252743641 2009-06-21
  • 打赏
  • 举报
回复
试一下这个事件CellValidated
moonzap 2009-06-17
  • 打赏
  • 举报
回复
没有高手能帮忙解决吗
moonzap 2009-06-16
  • 打赏
  • 举报
回复
首先感谢19楼的帖子
我试验了,不好用
原因如下:首先dataGridView1_KeyPress事件没有触发,因为我是在datagridview单元格处于编辑状态的情况下,按下的tab键,所以不触发.

希望能提供新的方法或思想
moonzap 2009-06-16
  • 打赏
  • 举报
回复
20楼 TAB要可以使用的,不能禁止
19楼 我马上去实验下 谢谢你提供的方法 我去修改下
CQBSBJIANXY 2009-06-15
  • 打赏
  • 举报
回复
在属性里直接停止“stoptab"就行了
ds252743641 2009-06-15
  • 打赏
  • 举报
回复
在按TAB之前把
int row = dataGridView1.CurrentCell.RowIndex;
int col = dataGridView1.CurrentCell.ColumnIndex;
存起来


private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 9)
{
this.dataGridView1.CurrentCell = this.dataGridView1[col, row];
MessageBox.Show("sdstttttttt");
}
}
ds252743641 2009-06-15
  • 打赏
  • 举报
回复
this.dataGridView1.CurrentCell = this.dataGridView1[col, row];


在按TAB之前把
int row = dataGridView1.CurrentCell.RowIndex;
int col = dataGridView1.CurrentCell.ColumnIndex;

存起来

判断是否为TAB,若是
this.dataGridView1.CurrentCell = this.dataGridView1[col, row];

moonzap 2009-06-15
  • 打赏
  • 举报
回复
问题是不是设置数值,而是将焦点设置回原来的单元格上
dazhabai 2009-06-15
  • 打赏
  • 举报
回复
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.RowIndex == 1&& e.ColumnIndex == 1)
{
this.dataGridView1[1, 1].Value = 0;
this.dataGridView1.Refresh();
}
}

针对datagridview的某一个cell的validation
moonzap 2009-06-15
  • 打赏
  • 举报
回复
就我上面说的 能给写下吗?说的这些我都明白,能写出来看看吗
longyuhong8888 2009-06-10
  • 打赏
  • 举报
回复
ProcessCmdKey是一個窗體事件,隻不過是重寫了,你要把它看成是一個函數,不要放在代碼裡。系統會自動調用的
moonzap 2009-06-10
  • 打赏
  • 举报
回复
我现在只想让焦点回到原来的单元格上 并且是选中状态 能帮我写个方法吗

想问下,出现这问题的原因?我理解是因为tab按下时,事件的顺序是最后执行的,导致焦点落到了下一个单元格上
moonzap 2009-06-10
  • 打赏
  • 举报
回复
ProcessCmdKey 方法我直接写到代码里面 出错啊 没有ProcessCmdKey


另:yhb417 e.Handled = true; 能详细说说吗
longyuhong8888 2009-06-10
  • 打赏
  • 举报
回复
看這個你就知道怎樣改了
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
//判断键盘按下的键。如果等于“enter”,则send一个“{tab}”。模拟按下“tab”键,实现单元格。向下移动
if (keyData == Keys.Enter && !btn_return.Focused && !btn_run.Focused)
{
System.Windows.Forms.SendKeys.Send("{tab}");
return true;
}

//继续原来base.ProcessCmdKey中的处理
return base.ProcessCmdKey(ref msg, keyData);
}
修改一下昵称 2009-06-10
  • 打赏
  • 举报
回复
e.Handled = true;
moonzap 2009-06-10
  • 打赏
  • 举报
回复
不是 我现在的问题 在于 先选中一个单元格 改了点数据 然后按了TAB键 会有一个信息提示,我点击提示信息的NO按钮,应该让焦点返回到刚才单元格并且是选中的状态,但是,现在焦点到了下一个单元格,我不知道怎么解决?请你帮帮
longyuhong8888 2009-06-10
  • 打赏
  • 举报
回复
不明白你說的意思,是要捕獲具體的按鍵嗎
[Quote=引用 4 楼 moonzap 的回复:]
具体要如何加入呢?
[/Quote]
moonzap 2009-06-10
  • 打赏
  • 举报
回复
具体要如何加入呢?
加载更多回复(6)

110,500

社区成员

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

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

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