在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键。然而,在Silverlight中当用户回车提交后,光标停留在文本框的第二行怎么也清除不掉,经过一段时间研究,终于找到解决方法,特写此文章与大家分享一下:

有时候我们在网站中,比如用户评论,添加一个回车键盘事件,快速提交,需要给文本框添加键盘事件处理方法,在这里先说一下组合键的使用方法,代码如下:

private void txtToSend_KeyDown(object sender, KeyEventArgs e)
{
    ModifierKeys keys = Keyboard.Modifiers;
    if (keys == ModifierKeys.Control && (e.Key == Key.Enter))
    {
      处理方法
    }
}

这里主要需要注意的是ModifierKeys,这里与WinForm中不同。

在Silverlight中,给文本框添加了回车提交事件后,但是回车过后,清除文本框内容,发现光标停留在文本框第二行,在后台用代码怎么也清除不掉,下面来讲一下解决办法:

设置文本框的 AcceptsReturn 为 False ,这一文本框就不会再换行啦!

但是,新的问题来了,文本框的内容怎么换行呢?当然我们想到了使用Ctrl + Enter 来换行,实现代码如下:

private void txtToSend_KeyDown(object sender, KeyEventArgs e)
{
     ModifierKeys keys = Keyboard.Modifiers;
if (keys == ModifierKeys.Control && (e.Key == Key.Enter))
{
txtToSend.Text += Environment.NewLine;
}

运行后,却发现并不能实现换行,只是光标移动到了开头,解决办法就是添加下面一行代码:

txtToSend.SelectionStart = txtToSend.Text.Length;

使用这句话,设置光标的位置,这样就可以看到效果了。当然我们还有实现回车提交信息的功能。

完整代码如下:

 private void txtToSend_KeyDown(object sender, KeyEventArgs e)
{
ModifierKeys keys = Keyboard.Modifiers;
if (keys == ModifierKeys.Control && (e.Key == Key.Enter))
{
txtToSend.Text += Environment.NewLine;
txtToSend.SelectionStart = txtToSend.Text.Length;
}
else
{
if (e.Key == Key.Enter)
{
radButton1_Click(null, null);
}
}
}

注意,当你按下Ctrl + Enter 时,同样会触发Enter事件,所以要把Enter的处理方法放在Else里面,这样就没有问题了。

当然,为了更好的用户体验,我们可以添加一个下拉框,让用户选中自己的操作方式,选中快捷键的功能,这里写两个键盘处理事件,代码如下:

private void txtToSend_KeyDown2(object sender, KeyEventArgs e)
{
ModifierKeys keys = Keyboard.Modifiers;
if (keys == ModifierKeys.Control && (e.Key == Key.Enter))
{
radButton1_Click(null, null);
}
} private void txtToSend_KeyDown(object sender, KeyEventArgs e)
{
ModifierKeys keys = Keyboard.Modifiers;
if (keys == ModifierKeys.Control && (e.Key == Key.Enter))
{
txtToSend.Text += Environment.NewLine;
txtToSend.SelectionStart = txtToSend.Text.Length;
}
else
{
if (e.Key == Key.Enter)
{
radButton1_Click(null, null);
}
}
}

然后,在下拉框的SelectionChanged事件中添加如下代码:

private void cmbHotKey_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e)
{
if (cmbHotKey != null)
{
if (cmbHotKey.SelectedIndex == )
{
txtToSend.KeyDown -= txtToSend_KeyDown;
txtToSend.KeyDown -= txtToSend_KeyDown2;
txtToSend.KeyDown += txtToSend_KeyDown;
txtToSend.AcceptsReturn = false;
}
else
{
txtToSend.KeyDown -= txtToSend_KeyDown;
txtToSend.KeyDown -= txtToSend_KeyDown2;
txtToSend.KeyDown += txtToSend_KeyDown2;
txtToSend.AcceptsReturn = true;
}
}
}

这里要注意的是,页面初始化时,控件能还没有初始化完成,所以要判断一下控件是否为NULL。

Silverlight中文本框添加回车事件后,换行无法清除的解决方法的更多相关文章

  1. winform中文本框添加拖拽功能

    对一个文本框添加拖拽功能: private void txtFolder_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataP ...

  2. dev中文本框等获取焦点事件

    <ClientSideEvents GotFocus="GotFocus" /> editContract.SetFocus()//设置文本框等的焦点 function ...

  3. HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本 ,请添加处理程序。如果下载文件,请添加 MIME 映射。 IIS站点中添加WCF项目后浏览网站报错解决方法。

    vs2013 wcf服务 windows10 家庭中文版 上图中的红色没有出现就按照下面的方法做: 按照上图所示勾选. 刷新上图中你的网站,查看上图右边的内容是否出现,如果出现,再次重新浏览网站,看一 ...

  4. python开发_tkinter_获取文本框内容_给文本框添加键盘输入事件

    在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...

  5. 给文本框添加模糊搜索功能(“我记录”MVC框架下实现)

    步骤: 1.在文本框中输入内容时,触发keyup事件: 2.在keyup事件的处理方法中,通过Ajax调用控制器的方法: 3.在控制器方法中,搜索满足条件的数据,这里分页获取数据,且只取第一页的数据, ...

  6. winform中文本框的一些案例

    项目中经常看到在输入金额时,会加逗号,最近在复习正则表达式,就联系下,界面如下:

  7. jquery实时监听某个文本框的输入事件

    想给页面的的一个文本框添加监听事件 $(function(){ //页面加载完毕后触发事件 $("textarea[name='content']").bind('input pr ...

  8. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

  9. 给tkinter文本框添加右键菜单

    给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...

随机推荐

  1. AdminLTE-2.2.0 学习

    这货基于Bootstrap 3(提供了统一的样式,覆盖了默认的),所以官方建议先搞懂Bootstrap 3再说. # 布局 Layout 布局由四个主要部分组成: Wrapper (.wrapper) ...

  2. IE6的连接数限制问题

    今天解决了一个bug.看似是UI的bug,最后发现IE的设置问题(严格来说,IE6这么做没有问题,因为HTTP协议的规范如此). 先描述一下问题: 有一个页面管理Job,选中一些Job可以Run,每次 ...

  3. OD使用教程12

    载入程序输入关键字: 双击进入程序 仔细看发现并没有跳转直接跳到这个mov,往上看发现retn上面有一个push,在这种编写手法当中这种组合相当于一个jmp, 跳到离它最近的一个值(在这就是004A5 ...

  4. ApiDoc 文档使用方式

    1.安装node.js 2.打开node.js 命令窗(shell)键入npm install apidoc -g 自动安装(几分钟) 3. C:\Users\user\AppData\Roaming ...

  5. JS-offsetParent定位父节点

    offsetParent:离当前元素最激动呢一个有定位的父节点 如果没有定位父级,默认是body IE7以下如果当前元素没有定位默认是body,如果有定位就是html IE7以下,如果当前元素的某个父 ...

  6. java TreeMap用法

    转自:http://huchenqiang90.blog.163.com/blog/static/11250080020101025956498/ 最近工作遇到需要按一个model中不同的列进行排序的 ...

  7. MyBatis SQL动态装配

    MyBatis的方便在于可以配置动态SQL,通过过滤器进行动态装配.在刚开始使用中,遇到不少问题,其中update语句也需要动态装配,核心在于DAO层要与.xml文件中的语句和变量名要匹配.例如: D ...

  8. 了解及使用IPV6

    1. 什么是 IPv6 IPv6指互联网协议(IP)第6版.目前大家上网主要使用互联网协议第四版,即IPv4. 在全球互联网高度发展的今天,IPv4 地址资源已经枯竭,互联网正在经历从IPv4网络向I ...

  9. angular下拉

    <div class="form-group col-sm-4"> <label class="col-sm-5 control-label" ...

  10. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...