我正在制作简单的C#Winform应用程序。有一个表格有一个文本框。我想通过箭头键更改文本框的位置,但文本框具有输入焦点,因此不会调用窗体的KeyDown事件。如何删除输入焦点?
仍然可以在文本框中键入内容。我尝试制作一个虚拟标签并给予重点,但它不起作用。如果我按任意键,光标将返回文本框。请帮我。我该如何解决这个问题?
答案 0 :(得分:1)
处理TextBox.KeyDown事件。在移动TextBox之后但在返回之前在处理程序中设置e.Handled = true;
。并且,是的,只处理箭头键。
答案 1 :(得分:0)
如果您希望能够1)键入编辑框并2)移动编辑框,则需要一个单独的机制来进入“移动模式”。
我建议“点击此处移动所选控件”按钮,或者使用“移动控制选项”控件上的右键单击上下文菜单。
您还必须调整用户如何表明移动已经结束。
希望这有帮助。
答案 2 :(得分:0)
注意:我刚刚意识到这甚至不是浏览器内的C#应用。我想无视这一切。因为你没有仔细阅读,所以我是正确的。
使用Javascript,特别是我个人推荐jQuery。
他们很好地记录了他们的图书馆:http://docs.jquery.com/Main_Page
对于此特定任务,您将要绑定某种键事件(即。keypress)并确保停止事件传播(以便阻止将要发送到的默认响应)简单地由textbox元素的默认监听器处理。)
所以,为了给你一个想法,如果你想用按键(也许是箭头键)改变文本框的位置,可以这样做:
/* 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函数的更多信息,请参阅上面提供的链接文档。希望有所帮助!
注意:显然,出于可访问性原因,在这种情况下阻止事件的默认处理是一个可怕的想法。选择按键以触发这些移动事件时,请使用最佳判断 - 无论您做什么,都不要禁止用户在输入字段中的文本中移动。