-1

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

VB.NET、WinForms、.NET 2.0

System.Windows.Forms.Textbox

多行 = 真

接受返回 = 真

AcceptsTab = 假

CausesValidation = False

没有明确编码的事件。

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

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

相反,Enter 键插入一个换行符,然后将焦点移到下一个控件(按钮)。它也可以使用 Ctrl-Enter 来完成,这真的让我感到困惑!

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

4

3 回答 3

2

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

例如,您可以先创建一个只有一个编辑框和一个其他控件的非常简单的项目,然后看看它做了什么。如果此代码按照您希望的方式运行,那么您可以开始一点一点地添加代码,使简单项目越来越接近预期的最终产品,直到出现错误。然后查看您添加的最后一点代码,看看您是否可以从中减去一些代码,直到错误消失。重复几次可能会帮助您找到罪魁祸首。

或者,您可以从现有的(行为不端的)代码开始,然后开始对其进行简化,直到错误消失。然后你添加回你删除的最后一个东西的一部分,并像上面那样迭代。

最后,在这种情况下,您还可以尝试为编辑控件的Leave事件添加事件处理程序,并在处理程序中放置一个断点。当 BP 命中时,检查调用堆栈,看看您是否可以了解哪些代码促成了焦点更改。为此,您的调试器可能需要配置为显示您没有源代码的代码(即禁用调试器中的 Just My Code 选项)。如果您想获得小组的帮助来破译它,您甚至可以将(修剪过的)调用堆栈粘贴到问题中。

ps有人知道上述迭代调试方法的名称吗?如果不是,我可以建议称它为牛顿法(或者可能是牛顿法),因为它类似于牛顿法,用于迭代地寻找数学函数的根。

于 2009-01-22T03:46:06.150 回答
0

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

textBox1.ScrollBars = ScrollBars.Vertical

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

于 2009-01-22T00:53:42.537 回答
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
于 2009-01-22T14:21:35.587 回答