【发布时间】:2010-07-15 05:26:50
【问题描述】:
我正在制作简单的 C# Winform 应用程序。有一个表格有一个文本框。我想通过箭头键更改文本框的位置,但文本框具有输入焦点,因此不会调用表单的 KeyDown 事件。如何移除该输入焦点?
应该仍然可以在文本框上打字。我尝试制作一个虚拟标签并给出焦点,但它不起作用。如果我按任意键,光标会回到文本框。请帮我。我该如何解决这个问题?
【问题讨论】:
我正在制作简单的 C# Winform 应用程序。有一个表格有一个文本框。我想通过箭头键更改文本框的位置,但文本框具有输入焦点,因此不会调用表单的 KeyDown 事件。如何移除该输入焦点?
应该仍然可以在文本框上打字。我尝试制作一个虚拟标签并给出焦点,但它不起作用。如果我按任意键,光标会回到文本框。请帮我。我该如何解决这个问题?
【问题讨论】:
处理TextBox.KeyDown 事件。并在您移动文本框之后但在您返回之前在您的处理程序中设置e.Handled = true;。而且,是的,只处理箭头键。
【讨论】:
嗯,不知道我是否理解。如果用户可以在编辑框中输入内容,那么它就可以获得焦点。如果他在表格之外点击,在表格的空白处,那么它就会失去焦点。
如果您希望能够 1) 在编辑框中键入内容并 2) 移动编辑框,那么您需要一个单独的机制来进入“移动模式”。
我建议使用“单击此处移动选定控件”按钮,或者在控件上使用“移动控件选项”右键单击上下文菜单。
您还必须考虑用户如何指示移动已结束。
希望这会有所帮助。
【讨论】:
注意:我刚刚意识到这甚至不是浏览器内的 C# 应用程序。我想忽略这一切。适合我阅读不够仔细。
使用Javascript,特别是我个人推荐jQuery。
他们很好地记录了他们的库:http://docs.jquery.com/Main_Page
对于这个特定的任务,您将要绑定某种关键事件(即keypress)并确保停止事件传播(这样您就可以防止发送的默认响应变得简单由文本框元素的默认侦听器处理)。
所以,给你一个想法,如果你想使用按键(可能是箭头键)更改文本框的位置,请执行以下操作:
/* link the jQuery source to the HTML page with script tag */
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
/* short hand for $(document).ready(function() { ... */
$(function() {
$("#textbox_id").keypress(function(e) {
var $this = $(this); // store the #textbox_id element in $this
e.preventDefault();
switch (e.keyCode) {
// find the actual integer code for the up arrow
case UP_ARROW:
$this.animate({
top : '-=10px'
}, 100); // time in milliseconds to complete the animation
/* fill in the cases */
}
}
});
好的,我希望你明白了。在我上面提供的链接的文档中找到更多关于 animate() 和其他 jQuery 函数的信息。希望对您有所帮助!
注意:显然,在这种情况下,出于可访问性的原因,阻止事件的默认处理是一个糟糕的主意。在选择按键来触发这些移动事件时,请使用您的最佳判断——无论您做什么,都不要禁止用户在输入字段中的文本内移动。
【讨论】: