如何从文本框中删除输入焦点?

时间:2010-07-15 05:26:50

标签: c# winforms

我正在制作简单的C#Winform应用程序。有一个表格有一个文本框。我想通过箭头键更改文本框的位置,但文本框具有输入焦点,因此不会调用窗体的KeyDown事件。如何删除输入焦点?

仍然可以在文本框中键入内容。我尝试制作一个虚拟标签并给予重点,但它不起作用。如果我按任意键,光标将返回文本框。请帮我。我该如何解决这个问题?

3 个答案:

答案 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函数的更多信息,请参阅上面提供的链接文档。希望有所帮助!

注意:显然,出于可访问性原因,在这种情况下阻止事件的默认处理是一个可怕的想法。选择按键以触发这些移动事件时,请使用最佳判断 - 无论您做什么,都不要禁止用户在输入字段中的文本中移动。