标题:[求助]DataGridView的一个超级变态的问题
只看楼主
andey
Rank: 2
等 级:新手上路
威 望:4
帖 子:938
专家分:0
注 册:2007-7-18
 问题点数:0 回复次数:31 
[求助]DataGridView的一个超级变态的问题



搞了好几天,本以为搞定了呢...唉..问题接着一个来!!!
黑线其实是TextBox..Enter会弹出一个窗体供选择用..
下面的DataGridView...重点说一下:首先是.默认的方法是这样的,按Enter键,焦点往下面移动,后来重写了一下ProcessCmdKey()方法,使其改变为焦点右移...OK...貌似可以啦..但是...
问题1:
在没有内容的DataGridView上按Enter...焦点右移,,但是当你编辑某个单元格时..是编辑啊..即光标出现后..此时按Enter..焦点又下移啦!!!
问题2:
跟问题1有关系..如果先进行上面(DataGridView上面)的操作,没事..But,,如果先操作DataGridView..并且是第一次(注意啊,是第一次)发生问题1的情况下,然后再返回上面操作的时候,不会有任何数据填入!!!好像没有发生一样

P.S..我采用绑定DataTable的方法来获取另一个窗体里传输的值..

高手帮帮忙吧..兄弟都快愁死啦@!!!
搜索更多相关主题的帖子: DataGridView 超级 焦点 Enter 
2007-10-08 18:22
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 
重寫DGV的KeyDown事件。把Enter鍵綁定到TAB鍵。然後再加一些妳想要的功能應該就可以了。

すばらしいコードを書き出すのは楽しい事です
2007-10-09 13:22
andey
Rank: 2
等 级:新手上路
威 望:4
帖 子:938
专家分:0
注 册:2007-7-18
得分:0 
谢谢..不过我还是没太懂...好麻烦的啊..

msdn == 葵花宝典!!!
QQ:122768959
2007-10-09 14:26
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 
妳想要的就是Enter鍵實現TAB鍵的效果吧。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Tab}");
}
}
妳自己拓展一下吧

すばらしいコードを書き出すのは楽しい事です
2007-10-09 15:19
andey
Rank: 2
等 级:新手上路
威 望:4
帖 子:938
专家分:0
注 册:2007-7-18
得分:0 

其实..不止是这个啦..
主要的是..DataGridView的Enter问题...当dataGridview处于编辑状态时..就时正在单元格里写东西时...按Enter就不行啦...重写的方法如下:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)//重写键盘回车代码
{
if ((ActiveControl is DataGridView) && (keyData == Keys.Enter) && (stockDataGridView.CurrentCell.ColumnIndex == 0 || stockDataGridView.CurrentCell.ColumnIndex == 1))
{
tempData = stockDataGridView.CurrentCell.RowIndex;
SelectGoods selectGoods = new SelectGoods();
selectGoods.ShowInTaskbar = false;
selectGoods.ShowDialog();
if(stockDataGridView.CurrentCell.ColumnIndex == 0)
System.Windows.Forms.SendKeys.Send("{TAB}");

}
if ((ActiveControl is DataGridView) && ( keyData == Keys.Enter))// || keyData == Keys.Up || keyData == Keys.Down ))
{
if (keyData == Keys.Enter)
{
System.Windows.Forms.SendKeys.Send("{TAB}");
return true;
}
if (keyData == Keys.Down)
System.Windows.Forms.SendKeys.Send("{TAB}");
else
SendKeys.Send("+{TAB}");
return true;
}
else
return base.ProcessCmdKey(ref msg, keyData);

}


msdn == 葵花宝典!!!
QQ:122768959
2007-10-09 16:21
andey
Rank: 2
等 级:新手上路
威 望:4
帖 子:938
专家分:0
注 册:2007-7-18
得分:0 

嗯...重写方法...
我现在都被搞晕啦啦啦...


msdn == 葵花宝典!!!
QQ:122768959
2007-10-10 10:36
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 

class MyDataGridView :DataGridView
{
protected override void OnKeyDown(KeyEventArgs e)
{

if (e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Tab}");
e.SuppressKeyPress = true;
}
base.OnKeyDown(e);

}
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
keyData = Keys.Tab;
}
return base.ProcessDialogKey(keyData);
}

}

搞定

妳就用這個重載的DGV控件吧


すばらしいコードを書き出すのは楽しい事です
2007-10-10 11:00
andey
Rank: 2
等 级:新手上路
威 望:4
帖 子:938
专家分:0
注 册:2007-7-18
得分:0 
这个重写的控件怎么引用啊..是不是全部用代码啊?...
好像不能拖拉出来是吧?

msdn == 葵花宝典!!!
QQ:122768959
2007-10-10 11:03
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 
妳原來的那些代碼全都不用了。把原來聲明和初期化DGV的地方改成下面這樣就可以實現了。
private MyDataGridView dataGridView1;
this.dataGridView1 = new MyDataGridView();

すばらしいコードを書き出すのは楽しい事です
2007-10-10 11:04
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
得分:0 

鬱悶 發現一個BUG。當編輯狀態的時候按SHIFT + ENTER 就亂了 其他都還好。
應該是 if (keyData == Keys.Enter)
{
keyData = Keys.Tab;
}
這句話沒有把SHIFT綁上


すばらしいコードを書き出すのは楽しい事です
2007-10-10 11:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-175910-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.501679 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved