Как получить символы текстового поля после новой строки в VB.Net
Прямо сейчас я создаю язык сценариев (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
@ Джемби, когда я использую твой код:
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
Помогите!!!
2 ответа
Вы можете изменить свой код следующим образом:
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
Вам также следует проверить значение Line.Lenght больше 5, иначе вы получите ArgumentOutOfRangeException.
Я думаю, что вы хотите использовать многострочное текстовое поле в вашей форме (есть свойство / флажок для многострочного текста для текстовых полей).
Затем вы можете получить строку из текстового поля и сделать split('\n');
в теме. (в синтаксисе VB конечно)
Это вернет массив строк, которые являются вашими строками.
Код для разделения будет выглядеть так: (ну, в любом случае, в C#)
string contents = MyTextBox.Text;
string[] lines = contents.Split('\n'); // or Environment.NewLine instead of '\n'