博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

事情是这样的,项目中使用了DotNetBar组件,其中一个界面使用了TextBoxX,并设置为多行输入。运行后发现这个输入框不接收回车事件。原因是DotNetBar把控件的回事事件变成了Tab事件,使得按回车可以在控件之间进行切换。但对于多行的TextBoxX,明显是要回车的,看来这是DotNetBar的一个BUG了(也许是一个未考虑到的应用场景)。既然它没有处理,我手动处理一下也行,也就是加一个事件几行代码的事情。于是有了下面的代码:

private void txtContent_KeyDown(object sender, KeyEventArgs e)
{
    
if (e.KeyCode == Keys.Enter) && !e.Control && !e.Shift && !e.Alt)
    {
        e.Handled 
= true;
        txtContent.AppendText(
"\r\n");
    }
}

 

然后就杯具了,if中的代码不论怎么样都不执行。断点调试后才发现,这两个值e.KeyCode 和 Keys.Enter这两个值确实不相等,看来DotnetBar的控件在内部进行了一些处理。最后试了下面的方法才生效:

if ((e.KeyCode == (Keys.Enter & ~Keys.MButton)) && !e.Control && !e.Shift && !e.Alt)

 

心中无限感慨,人不能NB到连这样的参数也要修改!最后的完整的代码是:

private void txtContent_KeyDown(object sender, KeyEventArgs e)
{
    
if ((e.KeyCode == (Keys.Enter & ~Keys.MButton)) && !e.Control && !e.Shift && !e.Alt)
    {
        e.Handled 
= true;
        e.SuppressKeyPress 
= true;
        txtContent.AppendText(
"\r\n");
    }
}

 

 

posted on 2010-10-09 11:09  黑米  阅读(1713)  评论(0编辑  收藏  举报