Vb.net 编译VBA程序

Vb.net 编译VBA程序,vb.net,Vb.net,在我的编程课上,我必须创建一个程序,允许用户输入一个句子,按钮“Encode”和“Decode”作为选项。因此,对于“Encode”,您必须将句子翻译成Asc数字(已经这样做了)。然而,我目前仍停留在“解码”部分,因为您必须使用for循环和数组以空格分隔Asc编号,然后将它们逐个转换为字符。以下是我目前掌握的情况: Public Class Form1 Dim Message As String Dim NewMessage As String Dim Part As S

在我的编程课上,我必须创建一个程序,允许用户输入一个句子,按钮“Encode”和“Decode”作为选项。因此,对于“Encode”,您必须将句子翻译成Asc数字(已经这样做了)。然而,我目前仍停留在“解码”部分,因为您必须使用for循环和数组以空格分隔Asc编号,然后将它们逐个转换为字符。以下是我目前掌握的情况:

Public Class Form1
    Dim Message As String
    Dim NewMessage As String
    Dim Part As String
    Dim Part2 As Integer
    Dim Letter As String
    Dim Length As String
    Dim ints() As Integer
    Dim intlength As Integer

    Private Sub btn_Enter_Click(sender As Object, e As EventArgs) Handles btn_Enter.Click
        Message = txt_Message.Text
        Length = Message.Length() - 1

        If rbn_Encode.Checked = True Then
            For Num As Integer = 0 To Length
                Letter = Message(Num)
                Me.lbl_Code.Text = lbl_Code.Text & Asc(Letter) & " "
            Next
        End If

        If rbn_Decode.Checked = True Then
            For Num As Integer = 0 To intlength Step 1
                If Message(Num) <> " " Then
                    Part = Part & Message(Num)
                Else
                    NewMessage = NewMessage & ChrW(Part) & " "
                End If
            Next
            Me.lbl_Code.Text = NewMessage
        End If
    End Sub

    Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
        Application.Exit()
    End Sub
End Class
公共类表单1
将消息设置为字符串
将NewMessage设置为字符串
作为字符串的暗淡部分
将第2部分设置为整数
将字母变暗作为字符串
字符串长度
作为整数的Dim ints()
将整数长度设置为整数
私有子btn\u Enter\u单击(发件人作为对象,e作为事件参数)处理btn\u Enter。单击
Message=txt\u Message.Text
长度=消息。长度()-1
如果rbn_Encode.Checked=True,则
对于Num As Integer=0到Length
字母=消息(Num)
Me.lbl_Code.Text=lbl_Code.Text&Asc(字母)&“
下一个
如果结束
如果rbn_Decode.Checked=True,则
对于Num As Integer=0到intlength步骤1
如果消息(Num)“,则
部分=部分和消息(Num)
其他的
NewMessage=NewMessage&ChrW(部分)&“”
如果结束
下一个
Me.lbl_Code.Text=NewMessage
如果结束
端接头
私有子ExitToolStripMenuItem\u单击(发件人作为对象,e作为事件参数)处理ExitToolStripMenuItem。单击
Application.Exit()
端接头
末级

我已经被困在这个问题上大约两周了,我仍然一无所知。感谢您的帮助,祝您度过愉快的一天。

这似乎偏离了问题的主题,但这一切都是为了找到更好的答案

好的,您的代码有一些问题。首先,确保“Option Strict”处于启用状态-请查看。这将迫使您正确转换类型,并减少出现问题的可能性。考虑到上述情况

Dim Length As String
应该是

Dim Length As Integer
继续下一步

每个程序都应该有一个单独的责任。您的
btn\u输入。单击
事件处理程序包含用于编码文本和解码数字的代码。这些应该被分离成各自的程序。在像您这样相对较短的代码中,这不是一个太大的问题,但即使在这里,它也会使事情变得更加模糊。看看下面的代码。还有更多的问题,但我们稍后会讨论。下面的代码更清晰,更易于维护

Private Sub btn_Enter_Click(sender As Object, e As EventArgs) Handles btn_Enter.Click
    Message = txt_Message.Text
    Length = Message.Length() - 1

    If rbn_Encode.Checked = True Then
        EncodeTextToAscii()
    End If

    If rbn_Decode.Checked = True Then
        DecodeToText()
    End If
End Sub

Private Sub DecodeToText()
    For Num As Integer = 0 To intlength Step 1
        If Message(Num) <> " " Then
            Part = Part & Message(Num)
        Else
            NewMessage = NewMessage & ChrW(Part) & " "
        End If
    Next
    Me.lbl_Code.Text = NewMessage
End Sub

Private Sub EncodeTextToAscii()
    For Num As Integer = 0 To Length
        Letter = Message(Num)
        Me.lbl_Code.Text = lbl_Code.Text & Asc(Letter) & " "
    Next
End Sub
最后谈谈你问题的实质。
Decode
过程现在可以这样编写

Private Sub DecodeToText()
    NewMessage = ""
    For Each asciiNumber As Integer In ints
        NewMessage = NewMessage & ChrW(asciiNumber) & " "
    Next
    Me.lbl_Code.Text = NewMessage
End Sub
您可以使用
For each
语句简化它,而不用费劲地获取循环的长度和数组中每个元素的ascii数。您不需要知道数组的长度。它只是在整个长度上循环。容易多了


作为练习,尝试将每个
想法的
应用到
编码过程中。:-)

不是VBA,VB.NET您应该在ChrW和AscW与Chr和Asc之间保持一致。但是,由于Chr和Asc随着时间的推移并不一致,用户和计算机可能不会做你认为他们做的事情,所以使用ChrW和AscW。
Private Sub DecodeToText()
    NewMessage = ""
    For Each asciiNumber As Integer In ints
        NewMessage = NewMessage & ChrW(asciiNumber) & " "
    Next
    Me.lbl_Code.Text = NewMessage
End Sub