在开发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. Apizza可以进行本地调试,也可以进行跨域调试,但是需要chrome插件

    装Apizza Chrome插件   1 1. 进入Apizza官方网站.注册账号,进入控制台,可以看到提示安装chrome插件 2. 进入google app商店,搜索apiano 找到对于插件安装 ...

  2. SQL Server 集合处理

    UNION ALL 返回两个结果集中所有的行,返回结果集中会存在重复行 UNION 返回两个结果集中去重的行,返回结果集中无重复行 INTERSECT 返回两个结果集都有的行,返回结果集中无重复行 E ...

  3. HTML5之语义标签

    在HTML5标准中,新加了几个用于增添页面语义的标签,这些标签有:article.section.nav和aside等.与别的大多数标签不 同,浏览器在解释渲染这些标签的时候仅仅把它作为普通的div块 ...

  4. UML类图6种关系的总结

    http://www.open-open.com/lib/view/open1328059700311.html

  5. Linux图片批处理

    通过imagemagick的convert命令来处理. 将多个图片横向拼接(宽图): convert +append 1.jpg 2.jpg all.jpg #人为指定顺序 convert +appe ...

  6. 利用FPGA加速实现高性能计算

    原文链接 原因:处理器本身无法满足高性能计算(HPC)应用软件的性能需求,导致需求和性能 之间出现了缺口. 最初解决办法:使用协处理器来提升处理器的性能. 协处理器(基于硬件的设计)具有三种能力: 1 ...

  7. Swift语法简介(一)

    或许网络上有很多成型的介绍,我只想写下来留给自己.欢迎批评.开撸! 1.第一个程序,Hello,world!古人云,学会了Hello,world!这门语言你就掌握了一半了. print("H ...

  8. 天气预报API(五):城市代码--“新编码”和“旧编码” 对比

    参考一些博客.文章 来查找 测试 接口,后来发现两套城市编码标准,有点想法,故拿来对比分析. 注:新旧编码是个人主观叫法,只是为了方便称呼,可能有不当之处,请留言更正. 暂且称 中国天气网等网站使用的 ...

  9. bond配置

    Bonding的模式一共有7种: #defineBOND_MODE_ROUNDROBIN       0   (balance-rr模式)网卡的负载均衡模式 #defineBOND_MODE_ACTI ...

  10. 未能从程序集“System.ServiceModel, Version=3.0.0.0问题解决

    在Windows Server 2008中的IIS服务器中部署WCF服务程序时,通过浏览器访问报出如下错误: 未能从程序集“System.ServiceModel, Version=3.0.0.0, ...