Vb.net 制造终端的问题

Vb.net 制造终端的问题,vb.net,Vb.net,我正在VB.net中编写一个终端,当我键入“帮助”并按enter键时,什么也没有发生。它应该显示“这是唯一的命令”:P’ 我似乎没有说得更具体,所以让我解释一下发生了什么 我输入下面的代码,执行应用程序,然后输入“帮助”,然后按回车键,然后什么也没发生 以下是完整的代码: Private Sub RichTextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles RichTextBox1.KeyPress Dim

我正在VB.net中编写一个终端,当我键入“帮助”并按enter键时,什么也没有发生。它应该显示“这是唯一的命令”:P’

我似乎没有说得更具体,所以让我解释一下发生了什么

我输入下面的代码,执行应用程序,然后输入“帮助”,然后按回车键,然后什么也没发生

以下是完整的代码:

Private Sub RichTextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles RichTextBox1.KeyPress
    Dim lines = RichTextBox1.Lines
    Dim num = lines
    Dim textlength = RichTextBox1.TextLength

    If Asc(e.KeyChar) = 13 Then
        If num.Last.ToString() = "help" Then
            RichTextBox1.AppendText("This is the only command. :P\r\n")
        End If
    End If
End Sub

请帮忙

这不是一个真正的答案,但我注意到您编写代码是为了不正确地创建新行

你做到了:

RichTextBox1.AppendText("This is the only command. :P\r\n")
虽然应该是这样的:

RichTextBox1.AppendText("This is the only command. :P" & vbCrLf)

通过尝试您的代码并删除

 If num.Last.ToString() = "help" Then
 End If
把这行代码

 If Asc(e.KeyChar) = 13 Then

        RichTextBox1.AppendText(Environment.NewLine & "This text will appear on the next line.")

    End If
它很好用


希望这能有所帮助。

因此,在代码中附加了调试器之后,问题就显而易见了。。。当您进行比较时,
lines.Last()
是一个空字符串

有很多方法可以让第二行到最后一行。我更喜欢LINQ,下面是整理好的代码,使用不区分大小写和区域性的字符串比较(这样您也可以键入
Help

我还使用了
Environment.NewLine
来提高代码的可移植性,并使用
String.Format()
以一种不会无故占用内存的方式组合字符串。这个例子有点过分,但它说明了应该如何做

值得注意的是,对于任何开发人员来说,使用调试器都是一项至关重要的技能(好吧,有一种替代方法是广泛的日志记录,但您需要同时了解这两种方法)。你需要这项技能来解决任何数量的问题


如果您不熟悉这个概念,调试就像暂停您的程序,让您检查正在发生的事情,然后一次运行一个命令来查看程序正在做什么。

您是否使用Visual Studio中的调试工具设置断点并逐行检查代码以查看它在做什么,我需要一个固定的密码。我根本不知道如何解决这个问题。再读一遍代码,你就会明白。它能编译吗?您的事件处理程序启动了吗?运行代码时,
num
textlength
e.KeyChar
num.Last
的值是什么?如果你不能回答这些问题,我们也不能。您需要使用VisualStudio中的调试工具逐步检查代码,并检查这些变量。这里有一个视频:问题是,您的代码(它的内容)似乎没有错,但我们必须做出一些假设,比如是
一个
IEnumerable
或者一个
列表
?如果是这样,则不需要调用
ToString()。若并没有,可能是从其他类型转换为字符串的问题,等等。。。从该代码片段诊断问题的唯一方法是逐步检查代码并确定哪些代码不起作用。我们不能为你这样做@Cᴏʀʏ试图引导您完成代码调试过程。“它需要修复。”。。。对不起,我不为你工作。我很高兴为那些愿意尝试帮助自己的人提供建议,但我不是来为你工作的。FWIW我的猜测是,该行末尾有一个回车符,因此最后一行将是
help\n
,但您需要使用调试器来查找。(是的,所有回到VB2的Visual Studio版本都内置了调试支持)。只需选择方法顶部的行并添加一个断点(如果我记得VB键布局是F9),然后运行程序不要使用
vbCrLf
。。。它不是便携式的。养成使用
环境的习惯。NewLine
问题已经解决。我现在有一个不同的问题。检查主体问题。问题已解决。我现在有一个不同的问题。检查主体问题。问题已解决。我现在有一个不同的问题。检查主要问题主体。请不要这样做。如果此问题已解决,请接受答案,然后提出新问题。SO的目的是成为所有编程问题/答案的存储库。你所做的是阻止任何人在你找到答案时遇到同样的问题。我已经恢复了您的编辑(但请在这里随意添加一个指向您的新问题的链接,以便我们可以找到它)嗯,我还有一个问题。你怎么能做到这一点,如果退格键被按下,它什么都不做?让我们后退一步…您试图将RTF用作控制台,而这不是它的设计目的。还有上百件事情不能按您想要的方式工作(粘贴、全选/删除、使用从右到左的unicode字符等),所有这些都会弄乱您的“历史记录”。如果我是你,我会有一个简单的文本框来输入。当用户按Enter键时,进行处理,然后将输出推送到“控制台”RTF,您可以将其设置为只读。更好的是,使用实际的控制台应用程序。这就是他们在那里的目的。。。
Private Sub RichTextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles RichTextBox1.KeyPress
    If Asc(e.KeyChar) = 13 Then
        If String.Equals(RichTextBox1.Lines.Reverse.Skip(1).First(),
                         "help",
                         StringComparison.InvariantCultureIgnoreCase) Then
            RichTextBox1.AppendText(String.Format("This is the only command. :P{0}", Environment.NewLine))
        End If
    End If
End Sub