DataGridViewTextBoxColumn设置KeyDown事件的问题

huai1988 2009-11-09 04:28:34
这是我界面中的代码,意味在DataGridView的单元格中输入一个值,然后点击F1,将输入的值显示到一个对话框出来
TextBox txtCell;
private void DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
txtCell = new TextBox();
txtCell = (TextBox)e.Control;
txtCell.KeyDown += new KeyEventHandler(txtCell_KeyDown);
}

private void txtCell_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
MessageBox.Show(txtCell.Text);
}
}

界面运行后发现一个奇怪的现象,就是我一开始在第一行的单元格输入值时,按F1,显示一次对话框
然后到第二行的单元格输入一个值时,按F1,显示两次对话款
再到第三行。。。。。。显示三次对话框。。。。。郁闷,是哪里出错了,求助~~!!
...全文
246 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengmeng4553 2009-11-09
  • 打赏
  • 举报
回复
你不应该用show(),应该用ShowDialog。这个问题我以前也遇到过,呵呵
lzsh0622 2009-11-09
  • 打赏
  • 举报
回复
加一个状态变量,控制不重复定义事件,感觉比重复定义了再销毁好些。
lzsh0622 2009-11-09
  • 打赏
  • 举报
回复
5楼更正:加一句

TextBox txtCell;
bool isShow = false;
private void DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (isShow == false)
{
txtCell = new TextBox();
txtCell = (TextBox)e.Control;
txtCell.KeyDown += new KeyEventHandler(txtCell_KeyDown);
isShow = true;
}
}

ljhcy99 2009-11-09
  • 打赏
  • 举报
回复
修改如下
private void txtCell_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
MessageBox.Show(txtCell.Text);
txtCell.KeyDown -= new KeyEventHandler(txtCell_KeyDown);
}
}
ljhcy99 2009-11-09
  • 打赏
  • 举报
回复
修改如下
private void txtCell_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
MessageBox.Show(txtCell.Text);
txtCell.KeyDown -= new KeyEventHandler(txtCell_KeyDown);
}


}
lzsh0622 2009-11-09
  • 打赏
  • 举报
回复
定义一个事件就够了

TextBox txtCell;
bool isShow = false;
private void DataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (isShow == false)
{
txtCell = new TextBox();
txtCell = (TextBox)e.Control;
txtCell.KeyDown += new KeyEventHandler(txtCell_KeyDown);
}
}
huai1988 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 juedaihuaihuai 的回复:]
代码不全吧 外层是不是还有foreach
[/Quote]

没有,这代码是我在以前一个老帖上看到,然后学习的,不过用了后出现了这错误
huai1988 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tchjl2007 的回复:]
MessageBox.Show(txtCell.Text);
貌似这样会SHOW出所有TextBox的值吧

还是先获取所在行号,在去SHOW相应行的TextBox就行了
[/Quote]

总共才一个……何来“所有”……
绝代坏坏 2009-11-09
  • 打赏
  • 举报
回复
代码不全吧 外层是不是还有foreach
Hamsic 2009-11-09
  • 打赏
  • 举报
回复
MessageBox.Show(txtCell.Text);
貌似这样会SHOW出所有TextBox的值吧

还是先获取所在行号,在去SHOW相应行的TextBox就行了

110,534

社区成员

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

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

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