WinForms Multiline Textbox,Enter键坚持将焦点移出文本框

时间:2009-01-22 00:36:29

标签: vb.net winforms textbox multiline

我有一个多行文本框和它下面的按钮。

VB.NET,WinForms,.NET 2.0

System.Windows.Forms.Textbox

Multiline = True

AcceptsReturn = True

AcceptsTab = False

CausesValidation = False

没有事件明确编码。

我想使用Enter键插入换行符,并且永远不会将焦点移动到下一个控件(按钮)。

我希望Tab键始终将焦点移动到Tab键顺序中的下一个控件(按钮)。

相反,Enter键是插入一个换行符然后将焦点移动到下一个控件(按钮)。它也通过Ctrl-Enter执行此操作,这真让我感到困惑!

通过阅读帮助文件和广泛的谷歌搜索,它应该按我需要的方式工作。 但显然我错过了一些东西。我究竟做错了什么?

3 个答案:

答案 0 :(得分:2)

我经常用于此类问题的方法是迭代地添加和减去代码,直到我可以将其缩小到引起问题的一件事。

例如,您可以从仅使用一个编辑框和另一个控件创建一个非常简单的项目开始,并查看它的作用。如果此代码按您希望的方式运行,那么您可以开始逐位添加代码,使简单项目更接近预期的最终产品,直到出现错误。然后查看你添加的最后一段代码,看看你是否可以减去那些代码,直到bug消失为止。迭代这几次可能会帮助你找到罪魁祸首。

或者,你可以从你现有的(行为不端的)代码开始,然后开始简化它,直到bug消失为止。然后你添加你删除的最后一件事的一部分,并按上述方式迭代。

最后,在这种情况下,您还可以尝试为编辑控件的Leave事件添加事件处理程序,并在处理程序中添加断点。当BP命中时,检查callstack并查看是否可以了解导致焦点变化的代码。为此,您的调试器可能需要配置为显示您没有源代码的代码(即禁用调试器中的Just My Code选项)。你甚至可以将(修剪过的)callstack粘贴到问题中,如果你想让小组帮忙解密它。

p.s。是否有人为上述迭代调试方法命名?如果没有,我可以建议称之为牛顿方法(或者可能是牛顿方法),因为它类似于牛顿方法,用于迭代地找到数学函数的根。

答案 1 :(得分:0)

绝对不应该这样做。我唯一能想到的是它没有足够的高度来容纳多条线。尝试添加...

textBox1.ScrollBars = ScrollBars.Vertical

如果不是我不知道。尝试创建一个空白项目并创建一个带有一个文本框的表单,一个按钮设置属性并查看会发生什么......

答案 2 :(得分:0)

事实证明我忘记了我在同一表格的其他地方(下面)做过这个:

'http://duncanmackenzie.net/blog/Enter-Instead-of-Tab/default.aspx
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
    If e.KeyCode = Keys.Enter Then
        e.Handled = True
        Me.ProcessTabKey(Not e.Shift)
    Else
        e.Handled = False
        MyBase.OnKeyUp(e)
    End If
End Sub