我正在尝试将文本框中的文本转换为拼音字母,但不确定如何。我以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的新手,以前从未做过此类事情。
答案 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