0

现在我正在构建一种脚本语言(EngineScript)。目前您只能键入一个命令/函数 (IE: sout "Hello world"),但我想扩展它。

所以我想知道你们是否知道任何代码可以将换行符后输入的字符转换为 VB2012.Net 中的单独变量。谢谢 :-)

这是我的代码:

Public Class Form1

    Dim strvar0 As String
    Dim strvar1 As String
    Dim strvar2 As String
    Dim strvar3 As String
    Dim numvar As Integer


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim first4Chars As String = TextBox1.Text.Substring(0, 4)
        Dim restOfChars As String = TextBox1.Text.ToString.Substring(5)

        Select Case first4Chars
            Case "sout"
                Select Case restOfChars
                    Case "box:str0"
                        TextBox2.Text = strvar0 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                    Case Else
                        TextBox2.Text = restOfChars & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                End Select

            Case "str0"
                strvar0 = restOfChars

            Case Else
                TextBox2.Text = "Error".ToString

        End Select

    End Sub



    Private Sub HelpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HelpToolStripMenuItem.Click
        Dim a As New Help
    End Sub

    Private Sub RunToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RunToolStripMenuItem.Click
        Button1.PerformClick()
    End Sub

End Class

...我正在做的是一个 Windows 窗体

@Jamby 当我使用您的代码时:

Public Class Form1
    Dim strvar0 As String
    Dim strvar1 As String
    Dim strvar2 As String
    Dim strvar3 As String
    Dim numvar As Integer



    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For Each Line In TextBox1.Text.Split(vbNewLine)

            Dim first4Chars As String = TextBox1.Text.Substring(0, 4)
            Dim restOfChars As String = TextBox1.Text.ToString.Substring(5)

            Select Case first4Chars
                Case "sout"
                    Select Case restOfChars
                        Case "box:str0"
                            TextBox2.Text = strvar0 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                        Case Else
                            TextBox2.Text = restOfChars & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                    End Select

                Case "str0"
                    strvar0 = restOfChars


                Case "exit"
                    Me.Close()

                Case "lofi"

                    Select Case restOfChars
                        Case "box:str0"
                            Process.Start(strvar0)
                        Case Else
                            Process.Start(restOfChars)
                    End Select


                Case "inet"
                    Process.Start("iexplore.exe" + restOfChars)
                Case Else
                    TextBox2.Text = "Error".ToString


            End Select
        Next

        TextBox1.Clear()

    End Sub



    Private Sub HelpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HelpToolStripMenuItem.Click
        Dim a As New Help
    End Sub

    Private Sub RunToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RunToolStripMenuItem.Click
        Button1.PerformClick()


    End Sub

    Private Sub MenuStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked

    End Sub
End Class

它不会产生错误,但是当我输入

sout Hello 新队 sout World

以下应该从我的输出窗口输出:

Hello



COMMAND //sout\\ has been successfully used
World




COMMAND //sout\\ has been successfully used

但相反,这种情况发生了:

Hello
sout World



COMMAND //sout\\ has been successfully used

帮助!!!

4

2 回答 2

0

You can change you code in this way:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each Line in TextBox1.Text.Split(vbNewLine)
        Dim first4Chars As String = Line.Substring(0, 4)
        Dim restOfChars As String = Line.Substring(5)

        Select Case first4Chars
            Case "sout"
                Select Case restOfChars
                    Case "box:str0"
                        TextBox2.Text = strvar0 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                    Case Else
                        TextBox2.Text = restOfChars & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                End Select
            Case "str0"
                strvar0 = restOfChars
            Case Else
                TextBox2.Text = "Error".ToString
        End Select
    Next
End Sub

You should also check Line.Lenght to be greater than 5, or you'll get an ArgumentOutOfRangeException.

于 2013-05-05T17:31:54.450 回答
0

我认为您要使用的是表单中的多行文本框(文本框的多行属性/复选框)。

然后您可以从文本框中获取字符串,然后split('\n');对其进行操作。(当然在 VB 语法中)

这将返回一个字符串数组,这是您的行。

要拆分的代码如下所示:(好吧,无论如何在 C# 中)

string contents = MyTextBox.Text;
string[] lines = contents.Split('\n'); // or Environment.NewLine instead of '\n'
于 2013-05-05T04:28:11.550 回答