如何使用vb.net替换文本框中的字母

时间:2015-04-19 21:56:52

标签: vb.net

我想用vb.net替换文本框上的每个字母或数字这是我的第一次尝试,但它一次只能替换一个字母

 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Select Case True
        Case TextBox1.Text.Contains("a")
            TextBox1.Text = TextBox1.Text.Replace("a", "c")
        Case TextBox1.Text.Contains("b")
            TextBox1.Text = TextBox1.Text.Replace("b", "d")
        Case TextBox1.Text.Contains("c")
            TextBox1.Text = TextBox1.Text.Replace("c", "e")
        Case TextBox1.Text.Contains("d")
            TextBox1.Text = TextBox1.Text.Replace("d", "f")
        Case TextBox1.Text.Contains("e")
            TextBox1.Text = TextBox1.Text.Replace("e", "g")
        Case TextBox1.Text.Contains("f")
            TextBox1.Text = TextBox1.Text.Replace("f", "h")
        Case TextBox1.Text.Contains("g")
            TextBox1.Text = TextBox1.Text.Replace("g", "i")
        Case TextBox1.Text.Contains("h")
            TextBox1.Text = TextBox1.Text.Replace("h", "j")
        Case TextBox1.Text.Contains("i")
            TextBox1.Text = TextBox1.Text.Replace("i", "k")
        Case TextBox1.Text.Contains("j")
            TextBox1.Text = TextBox1.Text.Replace("j", "l")
        Case TextBox1.Text.Contains("k")
            TextBox1.Text = TextBox1.Text.Replace("k", "m")
        Case TextBox1.Text.Contains("l")
            TextBox1.Text = TextBox1.Text.Replace("l", "n")
        Case TextBox1.Text.Contains("m")
            TextBox1.Text = TextBox1.Text.Replace("m", "o")
        Case TextBox1.Text.Contains("n")
            TextBox1.Text = TextBox1.Text.Replace("n", "p")
        Case TextBox1.Text.Contains("o")
            TextBox1.Text = TextBox1.Text.Replace("o", "q")
        Case TextBox1.Text.Contains("p")
            TextBox1.Text = TextBox1.Text.Replace("p", "r")
        Case TextBox1.Text.Contains("q")
            TextBox1.Text = TextBox1.Text.Replace("q", "s")
        Case TextBox1.Text.Contains("r")
            TextBox1.Text = TextBox1.Text.Replace("r", "t")
        Case TextBox1.Text.Contains("s")
            TextBox1.Text = TextBox1.Text.Replace("s", "u")
        Case TextBox1.Text.Contains("t")
            TextBox1.Text = TextBox1.Text.Replace("t", "v")
        Case TextBox1.Text.Contains("u")
            TextBox1.Text = TextBox1.Text.Replace("u", "w")
        Case TextBox1.Text.Contains("v")
            TextBox1.Text = TextBox1.Text.Replace("v", "x")
        Case TextBox1.Text.Contains("w")
            TextBox1.Text = TextBox1.Text.Replace("w", "y")
        Case TextBox1.Text.Contains("x")
            TextBox1.Text = TextBox1.Text.Replace("x", "z")
        Case TextBox1.Text.Contains("y")
            TextBox1.Text = TextBox1.Text.Replace("y", "a")
        Case TextBox1.Text.Contains("z")
            TextBox1.Text = TextBox1.Text.Replace("z", "b")

    End Select
End Sub

这不是我想要的,所以我尝试了这个

   Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

    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


End Sub

它也不起作用,只是一次写一封信。

我希望能够在文本框中编写例如“bike”并在这种情况下替换同一文本框(或其他文本框)中的文本:“dkmg”但我看不出问题所在。

4 个答案:

答案 0 :(得分:3)

你必须做的是:

  1. 一个接一个地遍历文本框的每个字符
  2. 每次,你拿一个字符,“处理它”(在你的情况下替换它),然后你用一个单独的字符串写,有点像这样(伪代码):

    new_string = ""
    for char in textbox.text:
        # do something with char, your 'if' routines would probably work
        new_string = new_string + char
    
  3. 然后将新字符串分配给文本框:

    textbox.text = new_string
    
  4. 如果您总想为每个字母添加2个字母,则可以将每个字符视为整数。有一个例子here(见下图)。一旦你有了这个,你可以简单地将“2”添加到你的char中,然后再将它打印回字符串(可能需要进行一些转换,我会让你弄清楚):

        for char in textbox.text:
            new_string = new_string + (char + 2)
    

    这大部分都有效,但你必须自己处理边缘情况(y,z,Y,Z)。您可以使用this chart作为参考。

答案 1 :(得分:3)

为了扩展Joe的答案和伪代码,通过字符串的简单For Each循环将允许您一次处理一个字符。最简单的方法是使用字符的ASCII值来确定要替换它的内容,但正如Joe所说,你必须处理边缘情况,因为ASCII表包含许多符号,而不仅仅是字母,而且它们&# 39;按特定顺序重新开始。

在您发布的代码中,您似乎将每个字母替换为当前字母位置的相应字母2个空格(即a = c,b = d等)。

ASCII表使用65-90表示A到Z,97-122表示a到z。因此,Y,Z,y和z的边缘情况 - 例如,如果你向Z添加2,你将获得|,而不是B.这是If语句可以帮助的地方(还有其他方法可以做它也像Select)。

示例代码说明了这一点:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim newString As StringBuilder = New StringBuilder()

    For Each character As Char In TextBox1.Text
        If character = "Y"c Then
            newString.Append(Chr(65))
        Else If character = "Z"c Then
            newString.Append(Chr(66))
        Else If character = "y"c Then
            newString.Append(Chr(97))
        Else If character = "z"c Then
            newString.Append(Chr(98))
        Else
            newString.Append(Chr(Asc(character) + 2))
        End If
    Next

    TextBox1.Text = newString.ToString()
End Sub

非常简单。我使用StringBuilder,因为它可以更高效,具体取决于字符串的长度。替代方案:

Dim newString As String

newString = newString + Chr(character) 

会导致通过循环为每次迭代创建一个newString的新副本 - 所以如果你有一个10个字符的字符串,你最终会得到10个newString的副本 - 每个循环一个。

Asc函数获取字符的ASCII值,Chr函数获取ASCII值指定的字符。字符旁边的小写c(即"A"c)只表示它是Char,而不是String

请注意,上面的代码将处理任何ASCII值,因此如果您只想处理字符,则需要在循环中进行更多检查。我将此作为练习留给读者。

答案 2 :(得分:1)

你走了:

    TextBox1.Text = (From c In TextBox1.Text.ToLower
                     Where c >= "a"c AndAlso c <= "z"c
                     Select Chr(97 + (Asc(c) - 95) Mod 26)).ToArray

答案 3 :(得分:0)

在失去焦点后将第一个字母改为上部,其余部分改为降低:

 Private Sub CapsLock(TextCaps)
    'تغير اول حرف الي حرف كير
    Dim fNameS As String = ""
    Dim liS As String = ""
    Dim lis2 As String = ""

    For i = 1 To Len(TextCaps)
        liS = Mid(TextCaps, i, 1)
        If i > 1 Then
            lis2 = Mid(TextCaps, (i - 1), 1)
        End If

        If i = 1 Or lis2 = " " Then

            liS = liS.ToUpper
            fNameS = fNameS & liS

        Else

            liS = liS.ToLower

            fNameS = fNameS & liS


        End If
    Next
    TextCaps2 = fNameS