肯定有这样子的需求:我们希望能用快捷键代替鼠标点击做一些事情,例如一个典型的应用就是论坛上常用的Ctrl + Enter 快捷发帖子。就以Ctrl+Enter快捷发帖子为例,实质上呢,就是通过js脚本,捕获系统的onkeyup事件,判断event.ctrlKey是否为true并且event.keyCode为13,如果满足这个条件,那么就调用按钮对象的click()方法,等同于用鼠标去点击按钮。写个简单的示例代码:
上面的脚本可以方便的给指定的按钮加上快捷键。如果现在我们希望应用到我们的服务器端控件当中去,例如Button、Linkbutton、Hyperlink等,因为控件的ID各不相同,而且所对应的快捷键也各不相同,那么我们就需要写一个控件来给他们添加快捷键了。
想想这个控件需要哪些属性?
TargetControlID:string:既然是给其他控件绑定的,那么所要绑定的目标控件ID是少不了了,根据这个控件ID,我们才能确定一个控件,才能知道它输出时的客户端ID,才能根据客户端ID来在脚本里面确定这个对象。
CtrlKey:bool:判断是否用到Ctrl组合键
ShiftKey:bool:判断是否用到Shift组合键
AltKey:bool:判断是否用到Alt组合键
KeyCode:int:和DHTML里面的event.keyCode对应的,例如Enter的keyCode是13。(注:其实这个不是很友好,因为用的时候还要找一下键盘各个按键和keyCode的对应关系,如果结合一个快捷键设置的控件就比较完美了)
Text:string:可能顺便需要一点文字说明什么的
相对来说,这是一个比较简单的用户自定义控件应用,创建一个名字为HotKey的类,继承自System.Web.UI.Controls。根据目标控件ID查找控件对象:this.cachedTargetControl = this.NamingContainer.FindControl(this.TargetControlID);
根据上面属性,我们就可以生成相应的客户端脚本了,然后在重写控件的OnPreRender事件中使用RegisterClientScriptBlock方法输出脚本。
代码相对比较简单:
最后,调用的时候就比较方便了:
和普通的自定义用户控件一样:
<asp:Button Runat="server" id="PostButton" CssClass="txt3"></asp:Button>
<cs:Hotkey runat="server" TargetControlID="PostButton" KeyCode="13" CtrlKey="True" Text="(Ctrl + Enter)"/>
完整的应用请参考CCS1.1(http://www.communityserver.cn/ )的代码。
打印 | 张贴于 2005-10-29 23:29:00 | Tag:Web技术 Community Server
目前致力于
留言反馈
/// 是否使用Alt复合键
/// </summary>
public bool AltKey ...
这里两个错误:
1. AltKey 命名错误。应该用类似 isAltKeyUsed 的名称。
2. comment 错误。“是否使用Alk复合键”意义含糊。正确的注释是:Returns true if alt key is used, or false if alt key is not used.
其他的你可以自己琢磨。
1 命名规则问题 按照我习惯 我直接写“使用Alt”
2 注释。宝玉写的再怎么含糊也比你写的E文要好多了! 那东西我根本就看不懂
3 “其他的你可以自己琢磨。 ” 好像你是什么老大似的
谢谢!
是好用呀!
我顶你呀!!
----
那你还说个P,干脆所有标签都不摇了造你说的,你在偷换前提DD,
函数名称必须以一个动词打头 而 namespace 必须用名词
----
AutoPostBack 是 ns?你nb阿,变戏法
/// <summary>
/// 是否使用Alt复合键
/// </summary>
public bool AltKey
namespace 也拿来和 method 命名比较了
--------
你说 AltKey是方法?你太nb了 我在地球,你在另外一个平行世界,没法和您比。
对于函数的注释,第一句话就要明确地阐述这个函数的input和output及其关联性。这个函数接受什么,返回的结果是什么。至于一些冗长的部分,才能放到你所谓的remark里面去。
真是糊涂啊,最讨厌你这样的人了,挑毛病就挑,还说这里的人误人子弟,什么东西嘛,把你还来个ji8。
/// 是否使用Alt复合键
/// </summary>
public bool AltKey ...
这里两个错误:
1. AltKey 命名错误。应该用类似 isAltKeyUsed 的名称。
拜托!!有点常识~
asp tag里的attributes defination和method defination是一个概念的东西吗??attributes如果这样naming就是错误!
那请教 System.Web.UI.WebControls.RadioButton.AutoPostBack 好还是
System.Web.UI.WebControls.IsRadioButton.AutoPostBack 好,
如果是您的好 ,我建议发起倡议让MS改了吧,也TMD太误人子弟了
另外,说起emacs 你小子撞枪口上了,你算个毛阿,就你那点道行。
类似这些话,建议宝玉放到 remarks标签里,这位爷是来搞笑的估计
拜托!!有点常识~
asp tag里的attributes defination和method defination是一个概念的东西吗??attributes如果这样naming就是错误!
我从不针对细枝未节进行评论,要知道,写文章目的在于总结、启发、收获。
你应该从本文的标题(即要论述的主题)入手,进行评论,并给出建议。
在说,命名方式各有各的规范,并不见得你说的就对。
asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False"
没有写成 IsAutoGenerateColumns 那你也应该由此大声疾呼 WEB控件是误人的东东嘛!!!
我写blog有两个目的:
1. 对得到一些批评和指导
2. 能对别人有所启发
我以为你要拿什么好东东出来,结果是在这儿显摆;连我一贯潜水的人都想忍不住了!
简直乱评一通!!!
好态度!那我就要开始抬杠了。随便拿出一段:
/// <summary>
/// 是否使用Alt复合键
/// </summary>
public bool AltKey ...
这里两个错误:
1. AltKey 命名错误。应该用类似 isAltKeyUsed 的名称。
2. comment 错误。“是否使用Alk复合键”意义含糊。正确的注释是:Returns true if alt key is used, or false if alt key is not used.
其他的你可以自己琢磨。
盼复!