Silverlight中文本框添加回车事件后,换行无法清除的解决方法
在开发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中文本框添加回车事件后,换行无法清除的解决方法的更多相关文章
- winform中文本框添加拖拽功能
对一个文本框添加拖拽功能: private void txtFolder_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataP ...
- dev中文本框等获取焦点事件
<ClientSideEvents GotFocus="GotFocus" /> editContract.SetFocus()//设置文本框等的焦点 function ...
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本 ,请添加处理程序。如果下载文件,请添加 MIME 映射。 IIS站点中添加WCF项目后浏览网站报错解决方法。
vs2013 wcf服务 windows10 家庭中文版 上图中的红色没有出现就按照下面的方法做: 按照上图所示勾选. 刷新上图中你的网站,查看上图右边的内容是否出现,如果出现,再次重新浏览网站,看一 ...
- python开发_tkinter_获取文本框内容_给文本框添加键盘输入事件
在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...
- 给文本框添加模糊搜索功能(“我记录”MVC框架下实现)
步骤: 1.在文本框中输入内容时,触发keyup事件: 2.在keyup事件的处理方法中,通过Ajax调用控制器的方法: 3.在控制器方法中,搜索满足条件的数据,这里分页获取数据,且只取第一页的数据, ...
- winform中文本框的一些案例
项目中经常看到在输入金额时,会加逗号,最近在复习正则表达式,就联系下,界面如下:
- jquery实时监听某个文本框的输入事件
想给页面的的一个文本框添加监听事件 $(function(){ //页面加载完毕后触发事件 $("textarea[name='content']").bind('input pr ...
- WinForm -- 为TextBox文本框添加鼠标右键菜单
WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...
- 给tkinter文本框添加右键菜单
给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...
随机推荐
- amr转MP3
using System; using System.Threading; using System.IO; using System.Diagnostics; using System.Securi ...
- Linux下chkconfig命令详解
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...
- LinkedHahsMap和HashMap的比较
http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html#commentform 一般情况下,我们用的最多的是HashMap,在M ...
- 由Selenium1转变为Selenium2所遇到的问题
1.使用ant脚本运行测试,报NoClassDefError,但使用junit方式运行或debug,都没有错误. 原因:找不到包,但具体是哪个包,不清楚:且为何使用junit方式运行就没有问题,也不清 ...
- 简单jquery实现select三级联动
简单的jquery实现select三级联动 代码如下: <!DOCTYPE html> <html> <head> <meta charset="u ...
- npm ERR publish 403,nodejs发布包流程
nodejs学习体验之发布包,发布环境如下:1:win10系统,2:已安装nodejs. 具体操作步骤如下: *编写模块 1)新建文件夹,比如:somepackage 2) 该文件夹下新建js文件,比 ...
- java 线程安全不线程不安全
经常看到一些类,有的说线程安全,有的说线程不安全,顿时懵逼. 线程安全不安全,主要是在多线程执行的情况下,如果由于线程之间抢占资源而造成程序的bug即为线程不安全,下面就拿arraylist 和Vec ...
- Spring 学习笔记 2. 尚硅谷_佟刚_Spring_IOC&DI概述
1,远古时代 这里讲述的IOC的演变历史,举一个例子,假如需要生成HTML和PDF格式的报表,以前的开发方式就是有个报表服务类需要使用报表生成器 它需要和其他三个都关联,它既需要知道接口类型,也需要知 ...
- Freemarker日期格式化处理
基本参数: date: 只显示日期,不显示时间.如${createTime?date} 或${createTime?date('yyyy-MM-dd')} time: 只显示时间,不显示日期如${cr ...
- TCL:表格(xls)中写入数据
intToChar.tcl # input a number : 1 to 32 , you will get a char A to Z #A-Z:1-32 proc intToChar {int} ...