Public Class MusicArrangement Public basicClass As DeviceObjectClasses Private gMUSICdic As Dictionary(Of String, List(Of String)) Private gcMUSICdic As Dictionary(Of String, List(Of String)) Public GmusicVal As String = String.Empty Public G_input As String Private Sub MusicArrangement_Load(sender As Object, e As EventArgs) Handles MyBase.Load gcMUSICdic = New Dictionary(Of String, List(Of String)) gMUSICdic = New Dictionary(Of String, List(Of String)) ComboBox1.Items.Clear() For Each basicClassnode In basicClass.DeviceClass If basicClassnode.Name.Equals("MUSIC") Then For Each basicClassnodeMUSIC In basicClassnode.Methods If basicClassnodeMUSIC.Params.Count >= 3 And basicClassnodeMUSIC.Name.IndexOf("播放") = 0 Then ComboBox1.Items.Add(basicClassnodeMUSIC.Params(1).DataRange) Dim li As New List(Of String) li.AddRange(basicClassnodeMUSIC.Params(0).DataRange.Split(",")) gcMUSICdic.Add(basicClassnodeMUSIC.Params(1).DataRange, li) Dim lic As New List(Of String) Select Case basicClassnodeMUSIC.Params(2).DataType Case "List" lic.AddRange(basicClassnodeMUSIC.Params(2).DataRange.Split(",")) Case "Integer" Dim dowmint As Integer = -1 Dim upint As Integer = -1 Dim intbuf() As String = basicClassnodeMUSIC.Params(2).DataRange.Split(",") Integer.TryParse(intbuf(0), dowmint) Integer.TryParse(intbuf(1), upint) If dowmint = -1 Or upint = -1 Then lic.Add(1) Else For i = dowmint To upint lic.Add(i) Next End If End Select gMUSICdic.Add(basicClassnodeMUSIC.Params(1).DataRange, lic) End If Next End If Next ComboBox1.SelectedIndex = 0 LoadInputText(G_input) End Sub Private Sub LoadInputText(inputstr As String) If String.IsNullOrEmpty(inputstr) Then Return Dim buf() As String = inputstr.Split(",") If buf.Length > 0 Then For i As Integer = 0 To ComboBox1.Items.Count - 1 If ComboBox1.Items(i).ToString.Contains(buf(0)) Then ComboBox1.SelectedIndex = i Exit For End If Next End If If buf.Length > 1 Then For i As Integer = 0 To ComboBox3.Items.Count - 1 If ComboBox3.Items(i).ToString.Contains(buf(1)) Then ComboBox3.SelectedIndex = i Exit For End If Next End If If buf.Length > 2 Then For i As Integer = 0 To ComboBox2.Items.Count - 1 If ComboBox2.Items(i).ToString.Contains(buf(2)) Then ComboBox2.SelectedIndex = i Exit For End If Next End If End Sub Public Shared Function CheckDataIsOk(datastr As String, gbasicClass As DeviceObjectClasses) As Boolean If String.IsNullOrEmpty(datastr) Then Return True Dim buf() As String = datastr.Split(",") If buf.Length <> 3 Then Return False Dim intbuf(2) As Integer If Not (Integer.TryParse(buf(0), intbuf(0)) And Integer.TryParse(buf(1), intbuf(1)) And Integer.TryParse(buf(2), intbuf(2))) Then Return False For Each basicClassnode In gbasicClass.DeviceClass If basicClassnode.Name.Equals("MUSIC") Then For Each basicClassnodeMUSIC In basicClassnode.Methods If basicClassnodeMUSIC.Params.Count >= 3 And basicClassnodeMUSIC.Name.IndexOf("播放") = 0 Then If basicClassnodeMUSIC.Params(1).DataRange.IndexOf(intbuf(0).ToString) = 0 Then Dim abuf() As String = basicClassnodeMUSIC.Params(0).DataRange.Split(",") For Each astr In abuf If astr.IndexOf(intbuf(1).ToString) = 0 Then Select Case basicClassnodeMUSIC.Params(2).DataType Case "List" Dim aintbuf() As String = basicClassnodeMUSIC.Params(2).DataRange.Split(",") For Each bbuf In aintbuf If bbuf.IndexOf(intbuf(0).ToString) = 0 Then Return True Next Return False Case "Integer" Dim aintbuf() As String = basicClassnodeMUSIC.Params(2).DataRange.Split(",") Dim aup, adown As Integer If Not (Integer.TryParse(aintbuf(0), adown) And Integer.TryParse(aintbuf(1), aup)) Then Return False If adown <= intbuf(2) And intbuf(2) <= aup Then Return True Else Return False End If End Select End If Next Return False End If End If Next End If Next Return False End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() Return End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged ComboBox3.Items.Clear() ComboBox3.Items.AddRange(gcMUSICdic.Item(ComboBox1.Text).ToArray) ComboBox3.SelectedIndex = 0 End Sub Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged ComboBox2.Items.Clear() ComboBox2.Items.AddRange(gMUSICdic.Item(ComboBox1.Text).ToArray) ComboBox2.SelectedIndex = 0 End Sub Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged Dim strbuf() As String = ComboBox1.Text.Split(" ") Dim name As String = String.Empty Dim kval As String = String.Empty If strbuf.Length > 1 Then name = $"{name}{ strbuf(0).Trim}," kval = $"{kval}{ strbuf(1).Trim}," Else name = $"{name}{ strbuf(0).Trim}," kval = $"{kval}{ strbuf(0).Trim}" End If strbuf = ComboBox3.Text.Split(" ") If strbuf.Length > 1 Then name = $"{name}{ strbuf(0).Trim}," kval = $"{kval}{ strbuf(1).Trim}," Else name = $"{name}{ strbuf(0).Trim}," kval = $"{kval}{ strbuf(0).Trim}" End If strbuf = ComboBox2.Text.Split(" ") If strbuf.Length > 1 Then name = $"{name}{ strbuf(0).Trim}" kval = $"{kval}{ strbuf(1).Trim}" Else name = $"{name}{ strbuf(0).Trim}" kval = $"{kval}{ strbuf(0).Trim}" End If TextBox1.Text = $"{kval }{vbCrLf }({name})" GmusicVal = name End Sub End Class