需要帮助将文本转换为北约拼音字母

时间:2019-06-03 08:42:45

标签: vb.net winforms

我正在尝试将文本框中的文本转换为拼音字母,但不确定如何。我以TextBox1作为主要文本框,要转换的按钮是Button9,我希望输出在Label10中。

例如,有人试图在文本框中输入Test,然后单击按钮,标签上显示Tango Echo Sierra Tango

如果可能的话,键入时自动翻译会很好。

我尝试使用从How to replace letters on a textbox using vb.net在互联网上找到的一些示例代码,但它并没有按照我翻译时的意愿进行操作。

(我尝试不添加实际语音字母的示例)

If TextBox1.Text.Contains("a") Then
    TextBox1.Text = TextBox1.Text.Replace("a", "c")
End If

If TextBox1.Text.Contains("b") Then
    TextBox1.Text = TextBox1.Text.Replace("b", "d")
End If

If TextBox1.Text.Contains("c") Then
    TextBox1.Text = TextBox1.Text.Replace("c", "e")
End If

If TextBox1.Text.Contains("d") Then
    TextBox1.Text = TextBox1.Text.Replace("d", "f")
End If

If TextBox1.Text.Contains("e") Then
    TextBox1.Text = TextBox1.Text.Replace("e", "g")
End If

If TextBox1.Text.Contains("f") Then
    TextBox1.Text = TextBox1.Text.Replace("f", "h")
End If

If TextBox1.Text.Contains("g") Then
    TextBox1.Text = TextBox1.Text.Replace("g", "i")
End If

If TextBox1.Text.Contains("h") Then
    TextBox1.Text = TextBox1.Text.Replace("h", "j")
End If

If TextBox1.Text.Contains("i") Then
    TextBox1.Text = TextBox1.Text.Replace("i", "k")
End If

If TextBox1.Text.Contains("j") Then
    TextBox1.Text = TextBox1.Text.Replace("j", "l")
End If

If TextBox1.Text.Contains("k") Then
    TextBox1.Text = TextBox1.Text.Replace("k", "m")
End If

If TextBox1.Text.Contains("l") Then
    TextBox1.Text = TextBox1.Text.Replace("l", "n")
End If

If TextBox1.Text.Contains("m") Then
    TextBox1.Text = TextBox1.Text.Replace("m", "o")

End If

If TextBox1.Text.Contains("n") Then
    TextBox1.Text = TextBox1.Text.Replace("n", "p")
End If

If TextBox1.Text.Contains("o") Then
    TextBox1.Text = TextBox1.Text.Replace("o", "q")
End If

If TextBox1.Text.Contains("p") Then
    TextBox1.Text = TextBox1.Text.Replace("p", "r")
End If

If TextBox1.Text.Contains("q") Then
    TextBox1.Text = TextBox1.Text.Replace("q", "s")
End If

If TextBox1.Text.Contains("r") Then
    TextBox1.Text = TextBox1.Text.Replace("r", "t")
End If

If TextBox1.Text.Contains("s") Then
    TextBox1.Text = TextBox1.Text.Replace("s", "u")
End If

If TextBox1.Text.Contains("t") Then
    TextBox1.Text = TextBox1.Text.Replace("t", "v")
End If

If TextBox1.Text.Contains("u") Then
    TextBox1.Text = TextBox1.Text.Replace("u", "w")
End If

If TextBox1.Text.Contains("v") Then
    TextBox1.Text = TextBox1.Text.Replace("v", "x")
End If

If TextBox1.Text.Contains("w") Then
    TextBox1.Text = TextBox1.Text.Replace("w", "y")
End If

If TextBox1.Text.Contains("x") Then
    TextBox1.Text = TextBox1.Text.Replace("x", "z")
End If

If TextBox1.Text.Contains("y") Then
    TextBox1.Text = TextBox1.Text.Replace("y", "a")
End If

If TextBox1.Text.Contains("z") Then
    TextBox1.Text = TextBox1.Text.Replace("z", "b")
End If

每个字母都在翻译,并且没有在右侧框中显示。我是VB的新手,以前从未做过此类事情。

1 个答案:

答案 0 :(得分:2)

有多种方法可以完成您想做的事情。

其中。可能不是最好的方法,但是它确实使您了解如何实现它。

首先,我定义了一个字典(Phonetic),该字典将大写的第一个字母映射到语音等效词:

Dim Phonetic As Dictionary(Of String, String)

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    ' List of phonetic words
    Dim Words() As String = {"Alfa", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliett", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X - ray", "Yankee", "Zulu"}

    ' Create dictionary to hold words and load with words
    Phonetic = New Dictionary(Of String, String)
    For Each Word As String In Words
        Phonetic.Add(Word.Substring(0, 1), Word)
    Next
End Sub

此词典是成员变量,因此可以在表单上的任何位置进行访问。确保在窗体级别而不是在方法或事件处理程序中定义它(Dim ...

接下来,当单击按钮时,将评估文本框的每个字母,并从字典中返回相应的语音单词。还添加了一个空格。修剪结果(删除最后一个空格)并显示在标签中:

Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
    LoadOutput()
End Sub

Private Sub LoadOutput()
    If Not Phonetic Is Nothing Then
        Dim Output As String = String.Empty

        For Each Letter As String In TextBox1.Text.ToUpper()
            Output += Phonetic(Letter) + " "
        Next
        Output = Output.Trim()

        Label10.Text = Output
    End If
End Sub

单击按钮时,将输出您要查找的内容。还有许多其他方法可以完成此任务-这只是您可以执行此方法的一个示例。

要在键入TextBox时自动翻译文本,只需使用TextChanged事件:

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    LoadOutput()
End Sub

编辑

OP后面的注释也可以处理无效字符(包括空格)。

这是在LoadOutput中通过检查Dictionary中是否存在字母来实现的。如果字母不存在,我们将其附加而不进行转换。如果确实如此,我们只需像以前一样将其转换并追加:

Private Sub LoadOutput()
        ...
        For Each Letter As String In TextBox1.Text.ToUpper()
            If Phonetic.ContainsKey(Letter) Then
                Output += Phonetic(Letter) + " "
            Else
                Output += Letter
            End If
        Next
        ...
End Sub

关于将1转换为One等的请求,这需要一些额外的工作。您必须在Form1_Load期间将这些手动添加到字典中:

Private Sub Form1_Load(...)
    ...
        Phonetic.Add(Word.Substring(0, 1), Word)
    Next
    Phonetic.Add("1", "One")
    Phonetic.Add("2", "Two")
    ... (And so on)
End Sub