Vb.net 如何检查文本框中的某个字符,并在同一位置替换为不同的字符串

Vb.net 如何检查文本框中的某个字符,并在同一位置替换为不同的字符串,vb.net,textbox,translation,letter,Vb.net,Textbox,Translation,Letter,我正在做一个莫尔斯电码翻译的小项目,我不知道如何检测文本框中的某个键,并在正确的位置用相应的莫尔斯电码点和破折号替换它 例如,如果您键入“abc”,那么我希望程序检查并输入 “——” 但是它也需要是动态的,所以如果你改变了信件的顺序,它可以更新译文 现在我有一个钥匙检查系统,你只能输入一条前进线,如果你搞砸了,你必须清除整个箱子。谢谢大家! 下面是我在上述评论中建议的一个基本示例,即使用两个单独的文本框,每次翻译全文: Private morseCodeDictionary As New Dic

我正在做一个莫尔斯电码翻译的小项目,我不知道如何检测文本框中的某个键,并在正确的位置用相应的莫尔斯电码点和破折号替换它

例如,如果您键入“abc”,那么我希望程序检查并输入

“——”

但是它也需要是动态的,所以如果你改变了信件的顺序,它可以更新译文


现在我有一个钥匙检查系统,你只能输入一条前进线,如果你搞砸了,你必须清除整个箱子。谢谢大家!

下面是我在上述评论中建议的一个基本示例,即使用两个单独的
文本框
,每次翻译全文:

Private morseCodeDictionary As New Dictionary(Of Char, String) From {{"a"c, ".-"},
                                                                     {"b"c, "-..."},
                                                                     {"c"c, "-.-."}}

Private Sub inputTextBox_TextChanged(sender As Object, e As EventArgs) Handles inputTextBox.TextChanged
    outputTextBox.Text = String.Join(" ",
                                     inputTextBox.Text.
                                                  ToLower().
                                                  Select(Function(ch) morseCodeDictionary(ch)))
End Sub
以下是一个不使用LINQ的实现,因此可能更容易理解:

Private Sub inputTextBox_TextChanged(sender As Object, e As EventArgs) Handles inputTextBox.TextChanged
    Dim characterStrings As New List(Of String)

    For Each ch As Char In inputTextBox.Text
        characterStrings.Add(morseCodeDictionary(ch))
    Next

    outputTextBox.Text = String.Join(" ", characterStrings)
End Sub

听起来你的建议不太实际。如果用户要输入一个字符,而您将其替换为摩尔斯电码,那么如何阻止用户将插入符号放置在该多字符代码中并键入另一个字符,从而产生无意义的结果?您必须防止用户在编码字符之间以外的任何位置输入常规字符,这将很混乱。我建议您有两个
文本框
。用户在第一个文本中输入常规文本,然后在第二个文本中显示只读的翻译。TBC…然后您可以简单地处理第一个
文本框的
TextChanged
事件,并每次翻译整个文本。它将非常快,因此性能不会成为问题,这意味着您不必关心用户在哪里输入字符。这也意味着他们不必阅读摩尔斯电码来记住他们输入的内容。当然,另一个选择是。这样,你就不必做任何翻译了。这就是说,如果用户要复制和粘贴,他们必须使用粘贴位置相同的字体,否则他们会得到未翻译的文本,所以这可能没有任何用处。我提供的代码创建了一个输出
字符串
,每个莫尔斯字符之间只有一个空格。我不确定您是如何表示单词边界的,但一个选项可能是在
字典中添加一个条目,其中键是空格字符,值是空的
字符串
。这样,输入中的每个空格将导致输出中莫尔斯字符之间的两个空格,这很可能是一个合适的单词边界。我正在使用您的代码,它工作正常谢谢!唯一的问题是当你按下字典中没有的任何键时,它会抛出一个错误。我说过这是一个基本的例子。它只是显示了一般原则,并解决了您最初的问题,但您可以修改代码以提供您需要或想要的任何附加功能。关于无效字符,我可以想出多种方法来处理它们。最简单的方法是在调用
Select
之前添加一个过滤器,以忽略以下字符:
Where(Function(ch)morseCodeDictionary.ContainsKey(ch))。
。这将在输入中保留无效字符,但在输出中忽略它们。您可能还希望从输出中删除无效字符,或者首先阻止输入无效字符,或者显示错误消息或其他内容。您需要决定应用程序的工作方式,然后编写相应的代码。