Imports System.ComponentModel Imports BLV_Studio.TableInteraction Imports FlexCell Imports Newtonsoft.Json Public Class ExecutionCondition '条件基类 Public G_ConfigActionConcitons As ConfigActionConcitons Public g_BasicClasses As DeviceObjectClasses Public DicDevicemodel As Dictionary(Of String, DeviceModel) '输入输出值 Public G_input As String Public G_Result As String Public G_celltag As Dictionary(Of String, String) Public G_Row As Integer = 0 Public G_grid As FlexCell.Grid Private Gr_Row As Integer = 0 Public G_ActionConfiguration As List(Of TableRowTag) '基类数据 Public G_ModeDevType() As String Private Dic_2 As Dictionary(Of String, List(Of String)) '条件列表 Private g_DicDragDrop As Dictionary(Of String, String) Public Shared joinway() As String = {"7 clear", "8 Do not disturb", "9 Later on", "10 Check out"} #Region "条件值" Private Property 动作输出使能 As UInt64 Private Property 房态 As UInt64 Private Property 控制取电服务 As UInt64 Private Property 取电状态 As UInt64 Private Property 勿扰状态 As UInt64 Private Property 清理状态 As UInt64 Private Property 呼叫状态 As UInt64 Private Property 洗衣状态 As UInt64 Private Property 退房状态 As UInt64 Private Property 稍后状态 As UInt64 Private Property SOS状态 As UInt64 Private Property 预约待租状态 As UInt64 Private Property 开锁状态 As UInt64 Private Property 行李状态 As UInt64 Private Property 保险箱状态 As UInt64 Private Property 门磁状态 As UInt64 Private Property 提示音状态 As UInt64 Private Property 背光状态 As UInt64 Private Property 季节状态 As UInt64 Private Property 时间状态 As UInt64 Private Property 起夜状态 As UInt64 Private Property 锁定状态 As UInt64 #End Region Enum colname rowid = 0 condition switch max End Enum Private Sub ExecutionCondition_Load(sender As Object, e As EventArgs) Handles MyBase.Load Gr_Row = G_Row Dic_2 = New Dictionary(Of String, List(Of String)) SceneNumber = New Dictionary(Of String, String) g_DicDragDrop = New Dictionary(Of String, String) If Init_Cob_CarryOutType() Then Init_Cob_KeyType() InitGrid1() End If LoadInputText(G_input) isloadok = True GetG_Result() GetNodeClass() End Sub Public Sub GetNodeClass() If IsNothing(G_grid) And Gr_Row = 0 Then Return Dim loadtag As TableRowTag = G_ActionConfiguration(Gr_Row - 7) Dim selectstr As String = String.Empty ComboBox2.Items.Clear() If DicDevicemodel.ContainsKey(loadtag.G_DevModeName) Then Dim devmodw As DeviceModel = DicDevicemodel.Item(loadtag.G_DevModeName) For Each node In devmodw.Nodes If node.Name.Equals(loadtag.G_DevNodeName) Then For Each index In node.Nodes If index.LoopAddr.Equals(loadtag.G_DevNodeIndex.ToString) Then selectstr = index.DefaultClass End If Next End If Next Select Case selectstr Case "KEY", "PIR", "DRY" If devmodw.Desc.Name.Equals("BLV_C12") Then ComboBox2.Items.AddRange({"KEY", "PIR", "DRY"}) Else ComboBox2.Items.AddRange({"KEY"}) End If Case "RKEY" ComboBox2.Items.Add("RKEY") Case "Virtual_Card" ComboBox2.Items.Add("Virtual_Card") Case "SLIDER" ComboBox2.Items.Add("SLIDER") Case "CARD" ComboBox2.Items.Add("CARD") Case "Carbon_Device" ComboBox2.Items.Add("Carbon_Device") Case "Scene_Restore" ComboBox2.Items.Add("Scene_Restore") Case Else End Select End If If ComboBox2.Items.Count > 0 Then '判断下拉选项中有没有符合 selectstr If ComboBox2.Items.Contains(selectstr) Then ComboBox2.Text = selectstr Else ComboBox2.Text = ComboBox2.Items(0) End If 'ComboBox2.Text = ComboBox2.Items(0) End If End Sub #Region "控件初始化" Private Sub Init_Cob_KeyType() If IsNothing(G_ModeDevType) OrElse G_ModeDevType.Length = 0 Then Return End If Cob_KeyType.Items.AddRange(G_ModeDevType) Cob_KeyType.SelectedIndex = 0 End Sub Private Function Init_Cob_CarryOutType() As Boolean Cob_CarryOutType.Items.Clear() If IsNothing(G_ConfigActionConcitons) Then MsgBox("Conditional base class loading failed. Please contact the developer!") Me.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Close() Return False End If Cob_CarryOutType.Items.AddRange(G_ConfigActionConcitons.ExeMode(0).DataRange.Split(",")) Cob_CarryOutType.SelectedIndex = 0 Return True End Function Private Function InitGrid1() initTable(G_ConfigActionConcitons.Conction) 'InitTableTow(G_ConfigActionConcitons.Conction) End Function Public Shared Function CheckDataIsOk(datastr As String, ConfigActionConcitons As ConfigActionConcitons, ModeDevType() As String, mytag As TableRowTag, ActionConfiguration As List(Of TableRowTag), Optional Tgrid As Grid = Nothing) As Boolean If mytag.G_DevNodeName.Equals("Voice") AndAlso String.IsNullOrEmpty(datastr) Then Return True If String.IsNullOrEmpty(datastr) Then Return False Dim buf() As String = datastr.Split(",") Dim dicKeyType = ComboBox1DateDropDown(Tgrid, mytag, ActionConfiguration) If Not IsNothing(dicKeyType) AndAlso dicKeyType.ContainsKey(datastr) Then Return True If buf.Length <> 3 Then Return False Dim intbuf(2) As UInt64 If Not (UInt64.TryParse(buf(0), intbuf(0)) And UInt64.TryParse(buf(1), intbuf(1)) And UInt64.TryParse(buf(2), intbuf(2))) Then Return False If IsNothing(ConfigActionConcitons) Then Return False If IsNothing(ModeDevType) And ModeDevType.Length = 0 Then Return False Dim abuf() As String = ConfigActionConcitons.ExeMode(0).DataRange.Split(",") Dim li As New List(Of String) li.AddRange(abuf) li.AddRange(joinway) For Each astr In li If astr.IndexOf(intbuf(1).ToString) = 0 Then For Each bstr In ModeDevType If bstr.IndexOf(intbuf(0).ToString) = 0 Then Return CheckStatusValue(intbuf(2), ConfigActionConcitons.Conction) End If Next Else Continue For End If Next Return False End Function Public Sub initTablechushen_Grid() chushen_Grid.NewFile() chushen_Grid.Rows = 1 chushen_Grid.Cols = 3 chushen_Grid.ExtendLastCol = True chushen_Grid.Cell(0, 1).Text = "Function name" chushen_Grid.Cell(0, 2).Text = "Functional approach" chushen_Grid.Column(2).CellType = CellTypeEnum.ComboBox chushen_Grid.Column(1).Width = 100 chushen_Grid.Column(0).Visible = False chushen_Grid.Column(1).Locked = True chushen_Grid.Column(0).Locked = True chushen_Grid.Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter chushen_Grid.Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter End Sub Public Sub AddChushen_GridRow(strvalue As String) Select Case strvalue Case "1 Click" DevEvenPar("DIMMING", "Control lighting", 0, "1 Open,2 Close,") SplitContainer4.Panel2Collapsed = False Cob_CarryOutType.Items.AddRange(joinway.ToArray) Case "3 Long press" DevEvenPar("DIMMING", "Cyclic dimming", 0, "9 Stop Dimming,") SplitContainer4.Panel2Collapsed = False For Each index In joinway Try Cob_CarryOutType.Items.Remove(index) Catch ex As Exception End Try Next Case "2 Long press release" DevEvenPar("DIMMING", "Cyclic dimming", 0, "7 Loop Up,8 Loop Down,", ",28 Loop up to the upper limit (light only),29 Loop down to the lower limit (light only)") SplitContainer4.Panel2Collapsed = False For Each index In joinway Try Cob_CarryOutType.Items.Remove(index) Catch ex As Exception End Try Next Case Else Return End Select Setingchushen_Grid() End Sub Public Sub Setingchushen_Grid() If SplitContainer4.Panel2Collapsed = False AndAlso chushen_Grid.Rows > 0 AndAlso G_celltag.Count > 0 Then Dim key As String = String.Empty For r = 1 To chushen_Grid.Rows - 1 For Each node In G_celltag If G_Row = 7 Then If chushen_Grid.Cell(r, 2).Text.Equals(node.Key) Then If node.Key.Contains("Dimming gradient time") Then chushen_Grid.Cell(r, 3).Text = NumberTOchushenGridText(node.Value) Else chushen_Grid.Cell(r, 3).Text = node.Value End If End If Else key = FunctionalTransformation(True, node.Key) If chushen_Grid.Cell(r, 1).Text.Equals(key) Then chushen_Grid.Cell(r, 2).Text = node.Value End If End If Next Next End If End Sub Public Function FunctionalTransformation(GTotype As Boolean, val As String) As String Dim result As String = String.Empty If GTotype Then Select Case val Case "DIMMING" result = "DIMMING" End Select Else Select Case val Case "调光" result = "DIMMING" End Select End If Return result End Function Public Sub DevEvenPar(g_nodename As String, nodename As String, parindex As Integer, ParamArray delebuf() As String) For Each node In g_BasicClasses.DeviceClass If node.Name.ToUpper.Equals(g_nodename) Then For Each Anode In node.Methods If Anode.Name.Equals(nodename) Then chushen_Grid.AddItem("") Dim key As String = FunctionalTransformation(True, g_nodename.ToUpper) chushen_Grid.Cell(chushen_Grid.Rows - 1, 1).Text = key If Anode.Params.Count < parindex Then Return Dim Index = Anode.Params(parindex) Dim li As New List(Of String) li.Add("") If Index.Name.Equals("Null") Then li.Add(0) Else If Index.DataType.Equals("List") Then Dim DataRange As String = Index.DataRange If Not IsNothing(delebuf) And delebuf.Length > 0 Then For Each delstr In delebuf DataRange = DataRange.Replace(delstr, "") Next End If Dim tbuf() As String = DataRange.Split(",") li.AddRange(tbuf) 'li.Remove(tbuf(0)) 'li.Insert(0, tbuf(0)) ElseIf Index.DataType.Equals("Integer") Then Dim buf() As String = Index.DataRange.Split(",") Dim startint As Integer = 0 Dim endint As Integer = 1 Integer.TryParse(buf(0), startint) Integer.TryParse(buf(1), endint) li.Add(startint) For i = startint To endint li.Add(i) Next 'li.Remove(Index.DataDefault) 'li.Insert(0, Index.DataDefault) End If End If If Dic_2.ContainsKey(node.Name.ToUpper) Then Dic_2.Remove(node.Name.ToUpper) End If Dic_2.Add(node.Name.ToUpper, li) 'chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = Index.DataDefault End If Next End If Next End Sub Public Sub initTable(Conction As List(Of Conction)) Table_Grid1.Rows = 1 Table_Grid1.Cols = colname.max Table_Grid1.ExtendLastCol = True For i = 0 To colname.max - 1 Table_Grid1.Cell(0, i).Text = [Enum].GetName(GetType(colname), i) Select Case i Case colname.rowid With Table_Grid1.Column(i) .Width = 0 .Visible = True End With Case colname.condition With Table_Grid1.Column(i) .Width = 110 .Alignment = FlexCell.AlignmentEnum.CenterCenter .Locked = True End With Case colname.switch With Table_Grid1.Column(i) .Width = 70 .Alignment = FlexCell.AlignmentEnum.CenterCenter '.Locked = True .CellType = CellTypeEnum.ComboBox End With Case Else Exit For End Select Next AddGrid1RowDragDrop(Conction) 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 Cob_KeyType.Items.Count - 1 If Cob_KeyType.Items(i).ToString.Contains(buf(0)) Then Cob_KeyType.SelectedIndex = i Exit For End If Next ComboBox1_DropDown(Nothing, Nothing) If Not String.IsNullOrEmpty(buf(0)) AndAlso SceneNumber.ContainsKey(buf(0)) Then ComboBox1.Text = buf(0) End If End If If buf.Length > 1 Then For i As Integer = 0 To Cob_CarryOutType.Items.Count - 1 If Cob_CarryOutType.Items(i).ToString.Contains(buf(1)) Then Cob_CarryOutType.SelectedIndex = i Exit For End If Next End If If buf.Length > 2 Then GetStatusValue(buf(2)) End If End Sub Public Sub AddGrid1RowDragDrop(Conction As List(Of Conction)) g_DicDragDrop.Clear() For Each node In Conction Table_Grid1.AddItem("") Table_Grid1.Cell(Table_Grid1.Rows - 1, colname.condition).Text = node.Name Table_Grid1.Cell(Table_Grid1.Rows - 1, colname.switch).Text = node.DataDefault If g_DicDragDrop.ContainsKey(node.Name) Then g_DicDragDrop.Item(node.Name) = node.Desc Else g_DicDragDrop.Add(node.Name, node.Desc) End If Next End Sub #End Region #Region "控件赋值" Public Sub SetControlVal() If String.IsNullOrEmpty(G_input) Then Cob_CarryOutType.SelectedIndex = 0 Else Dim bufstr() As String = G_input.Split(",") Dim u64 As UInt64 = 0 For index As Integer = 0 To Cob_CarryOutType.Items.Count - 1 Dim name() As String = Cob_CarryOutType.Items(index).ToString.Split(":") If name(0).Equals(bufstr(0)) Then Cob_CarryOutType.SelectedIndex = index Exit For End If Next GetStatusValue(bufstr(1)) End If End Sub #End Region Private Sub Grid1_ComboDropDown(Sender As Object, e As Grid.ComboDropDownEventArgs) Handles Table_Grid1.ComboDropDown If e.Row > 0 And e.Col = colname.switch Then 'Console.WriteLine(Grid1.Cell(e.Row, colname.condition).Text.Trim) If g_DicDragDrop.ContainsKey(Table_Grid1.Cell(e.Row, colname.condition).Text) Then Dim buf() As String = g_DicDragDrop.Item(Table_Grid1.Cell(e.Row, colname.condition).Text).Split(",") Me.Table_Grid1.ComboBox(colname.switch).Items.Clear() Dim cob_text As FlexCell.ComboBox = Me.Table_Grid1.ComboBox(colname.switch) For Each index In buf cob_text.Items.Add(index) Next End If End If End Sub Private Function Getresult() As UInt64 For i = 1 To Table_Grid1.Rows - 1 Select Case Table_Grid1.Cell(i, colname.condition).Text Case " 1 Action output enable" 动作输出使能 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 2 Judging room status" 房态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 3 Control card holder services" 控制取电服务 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 4 Determine the card holder status" 取电状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 5 Determine Do Not Disturb Status" 勿扰状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 6 Determine the cleaning status" 清理状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 7 Determine call status" 呼叫状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 8 Determine laundry status" 洗衣状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case " 9 Determine check-out status" 退房状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "10 Determine later status" 稍后状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "11 Determine SOS status" SOS状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) ' Case "12 判断预约待租状态" Case "12 Determine the delivery status" 预约待租状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "13 Determine unlocking status" 开锁状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "14 Determine luggage status" 行李状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "15 Determine the status of the safe box" 保险箱状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "16 Determine the door magnetic state" 门磁状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "17 Determine the status of the prompt sound" 提示音状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "18 Determine backlight status" 背光状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "19 Determine seasonal status" 季节状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "20 Determine time status" 时间状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "21 Determine the state of waking up at night" 起夜状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case "22 Determine lock status" 锁定状态 = CInt(GetNodeSelectStringValue(Table_Grid1.Cell(i, colname.switch).Text)) Case Else 'Throw New Exception($"未知条件属性名:{node.Name}") End Select Next Return GetConditionData() End Function Private Shared Function CheckStatusValue(u64str As String, Conction As List(Of Conction)) As Boolean Dim u64 As UInt64 = 0 UInt64.TryParse(u64str, u64) Dim cu64 As UInt64 = 0 For Each aenunindex In Conction Dim index As Integer = -1 Dim buf() As String = aenunindex.Desc.Split(",") Select Case aenunindex.Name Case " 1 Action output enable" index = Getrowu64Val(1, u64, ConditionBits.动作输出使能) Case " 2 Judging room status" index = Getrowu64Val(7, u64, ConditionBits.房态) Case " 3 Control card holder services" index = Getrowu64Val(1, u64, ConditionBits.控制取电服务) Case " 4 Determine the card holder status" index = Getrowu64Val(7, u64, ConditionBits.取电状态) Case " 5 Determine Do Not Disturb Status" index = Getrowu64Val(7, u64, ConditionBits.勿扰状态) Case " 6 Determine the cleaning status" index = Getrowu64Val(7, u64, ConditionBits.清理状态) Case " 7 Determine call status" index = Getrowu64Val(7, u64, ConditionBits.呼叫状态) Case " 8 Determine laundry status" index = Getrowu64Val(7, u64, ConditionBits.洗衣状态) Case " 9 Determine check-out status" index = Getrowu64Val(7, u64, ConditionBits.退房状态) Case "10 Determine later status" index = Getrowu64Val(7, u64, ConditionBits.稍后状态) Case "11 Determine SOS status" index = Getrowu64Val(7, u64, ConditionBits.SOS状态) ' Case "12 判断预约待租状态" Case "12 Determine the delivery status" index = Getrowu64Val(7, u64, ConditionBits.预约待租状态) Case "13 Determine unlocking status" index = Getrowu64Val(7, u64, ConditionBits.开锁状态) Case "14 Determine luggage status" index = Getrowu64Val(7, u64, ConditionBits.行李状态) Case "15 Determine the status of the safe box" index = Getrowu64Val(7, u64, ConditionBits.保险箱状态) Case "16 Determine the door magnetic state" index = Getrowu64Val(7, u64, ConditionBits.门磁状态) Case "17 Determine the status of the prompt sound" index = Getrowu64Val(7, u64, ConditionBits.提示音状态) Case "18 Determine backlight status" index = Getrowu64Val(7, u64, ConditionBits.背光状态) Case "19 Determine seasonal status" index = Getrowu64Val(7, u64, ConditionBits.季节状态) Case "20 Determine time status" index = Getrowu64Val(7, u64, ConditionBits.时间状态) Case "21 Determine the state of waking up at night" index = Getrowu64Val(7, u64, ConditionBits.起夜状态) Case "22 Determine lock status" index = Getrowu64Val(7, u64, ConditionBits.锁定状态) Case Else Continue For 'Throw New Exception($"未知条件属性名:{node.Name}") End Select If Isinspect(buf, index) Then Continue For End If Return False Next Return True End Function Public Shared Function Isinspect(buf() As String, index As Integer) As Boolean For Each bstr In buf If bstr.IndexOf(index.ToString) = 0 Then Return True End If Next Return False End Function Private Sub GetStatusValue(u64str As String) Dim u64 As UInt64 = 0 UInt64.TryParse(u64str, u64) Dim cu64 As UInt64 = 0 For i = 1 To Table_Grid1.Rows - 1 Dim index As Integer = 0 Select Case Table_Grid1.Cell(i, colname.condition).Text Case " 1 Action output enable" SetTablecolnameswitch(i, 1, u64, ConditionBits.动作输出使能) Case " 2 Judging room status" SetTablecolnameswitch(i, 7, u64, ConditionBits.房态) Case " 3 Control card holder services" SetTablecolnameswitch(i, 1, u64, ConditionBits.控制取电服务) Case " 4 Determine the card holder status" SetTablecolnameswitch(i, 7, u64, ConditionBits.取电状态) Case " 5 Determine Do Not Disturb Status" SetTablecolnameswitch(i, 7, u64, ConditionBits.勿扰状态) Case " 6 Determine the cleaning status" SetTablecolnameswitch(i, 7, u64, ConditionBits.清理状态) Case " 7 Determine call status" SetTablecolnameswitch(i, 7, u64, ConditionBits.呼叫状态) Case " 8 Determine laundry status" SetTablecolnameswitch(i, 7, u64, ConditionBits.洗衣状态) Case " 9 Determine check-out status" SetTablecolnameswitch(i, 7, u64, ConditionBits.退房状态) Case "10 Determine later status" SetTablecolnameswitch(i, 7, u64, ConditionBits.稍后状态) Case "11 Determine SOS status" SetTablecolnameswitch(i, 7, u64, ConditionBits.SOS状态) ' Case "12 判断预约待租状态" Case "12 Determine the delivery status" SetTablecolnameswitch(i, 7, u64, ConditionBits.预约待租状态) Case "13 Determine unlocking status" SetTablecolnameswitch(i, 7, u64, ConditionBits.开锁状态) Case "14 Determine luggage status" SetTablecolnameswitch(i, 7, u64, ConditionBits.行李状态) Case "15 Determine the status of the safe box" SetTablecolnameswitch(i, 7, u64, ConditionBits.保险箱状态) Case "16 Determine the door magnetic state" SetTablecolnameswitch(i, 7, u64, ConditionBits.门磁状态) Case "17 Determine the status of the prompt sound" SetTablecolnameswitch(i, 7, u64, ConditionBits.提示音状态) Case "18 Determine backlight status" SetTablecolnameswitch(i, 7, u64, ConditionBits.背光状态) Case "19 Determine seasonal status" SetTablecolnameswitch(i, 7, u64, ConditionBits.季节状态) Case "20 Determine time status" SetTablecolnameswitch(i, 7, u64, ConditionBits.时间状态) Case "21 Determine the state of waking up at night" SetTablecolnameswitch(i, 7, u64, ConditionBits.起夜状态) Case "22 Determine lock status" SetTablecolnameswitch(i, 7, u64, ConditionBits.锁定状态) Case Else 'Throw New Exception($"未知条件属性名:{node.Name}") End Select Next End Sub Private Sub SetTablecolnameswitch(rowid As Integer, cu64 As UInt64, u64 As UInt64, number As ConditionBits) u64 = u64 >> number Dim index As Integer = 0 index = u64 And cu64 For Each nameStr In g_DicDragDrop.Item(Table_Grid1.Cell(rowid, colname.condition).Text).Split(",") Dim strbuf() As String = nameStr.Split(":") If strbuf(0).Equals(index.ToString) Then Table_Grid1.Cell(rowid, colname.switch).Text = nameStr End If Next End Sub Private Shared Function Getrowu64Val(cu64 As UInt64, u64 As UInt64, number As ConditionBits) As Integer u64 = u64 >> number Dim index As Integer = 0 index = u64 And cu64 Return index End Function ''' ''' 获取节点选择项对应的数值 ''' ''' ''' Private Function GetNodeSelectStringValue(node As String) As String Dim result() As String If node.Contains(":") Then result = node.Trim.Split(":") ElseIf node.Contains(" ") Then result = node.Trim.Split(" ") Else Return "" End If Return result(0) End Function Public Function GetConditionData() As UInt64 Dim num As UInt64 = 0 num = num Or (动作输出使能 << ConditionBits.动作输出使能) num = num Or (房态 << ConditionBits.房态) num = num Or (控制取电服务 << ConditionBits.控制取电服务) num = num Or (取电状态 << ConditionBits.取电状态) num = num Or (勿扰状态 << ConditionBits.勿扰状态) num = num Or (清理状态 << ConditionBits.清理状态) num = num Or (呼叫状态 << ConditionBits.呼叫状态) num = num Or (洗衣状态 << ConditionBits.洗衣状态) num = num Or (退房状态 << ConditionBits.退房状态) num = num Or (稍后状态 << ConditionBits.稍后状态) num = num Or (SOS状态 << ConditionBits.SOS状态) num = num Or (预约待租状态 << ConditionBits.预约待租状态) num = num Or (开锁状态 << ConditionBits.开锁状态) num = num Or (行李状态 << ConditionBits.行李状态) num = num Or (保险箱状态 << ConditionBits.保险箱状态) num = num Or (门磁状态 << ConditionBits.门磁状态) num = num Or (提示音状态 << ConditionBits.提示音状态) num = num Or (背光状态 << ConditionBits.背光状态) num = num Or (季节状态 << ConditionBits.季节状态) num = num Or (时间状态 << ConditionBits.时间状态) num = num Or (起夜状态 << ConditionBits.起夜状态) num = num Or (锁定状态 << ConditionBits.锁定状态) Return num End Function Enum ConditionBits ''' 动作输出使能 动作输出使能 = 0 ''' 房态 房态 = 1 ''' 控制取电服务 控制取电服务 = 4 ''' 取电状态 取电状态 = 5 ''' 勿扰状态 勿扰状态 = 8 ''' 清理状态 清理状态 = 11 ''' 呼叫状态 呼叫状态 = 14 ''' 洗衣状态 洗衣状态 = 17 ''' 退房状态 退房状态 = 20 ''' 稍后状态 稍后状态 = 23 ''' SOS状态 SOS状态 = 26 ''' 预约待租状态 预约待租状态 = 29 ''' 开锁状态 开锁状态 = 32 ''' 行李状态 行李状态 = 35 ''' 保险箱状态 保险箱状态 = 38 ''' 门磁状态 门磁状态 = 41 ''' 提示音状态 提示音状态 = 44 ''' 背光状态 背光状态 = 47 ''' 季节状态 季节状态 = 50 ''' 时间状态 时间状态 = 53 ''' 起夜状态 起夜状态 = 56 ''' 锁定状态 锁定状态 = 59 ''' 保留字段 保留字段 = 62 End Enum Private isloadok As Boolean = False Public Sub GetG_Result() If isloadok Then G_Result = String.Empty Dim strbuf() As String = Cob_CarryOutType.Text.Trim.Split(" ") Dim u64 As UInt64 = Getresult() Dim kettypebuf() As String = Cob_KeyType.Text.Trim.Split(" ") G_Result = $"{kettypebuf(0)},{strbuf(0)},{u64}" Label3.Text = $"{kettypebuf(1)},{strbuf(1)},Execution condition {vbCrLf }({G_Result})" End If End Sub Public Sub GetGTcelltag() Dim number() As String = ComboBox1.Text.Split(" ") If IsNothing(G_celltag) OrElse IsNothing(SceneNumber) OrElse String.IsNullOrEmpty(ComboBox1.Text) Then SetMasterMask(G_Row, number(0)) If G_celltag.ContainsKey("CallRow") Then G_celltag.Remove("CallRow") End If Return End If If SceneNumber.ContainsKey(ComboBox1.Text) Then clearcelltext(G_Row) If G_celltag.ContainsKey("CallRow") Then G_celltag.Item("CallRow") = number(0) Else G_celltag.Add("CallRow", number(0)) End If G_Result = ComboBox1.Text End If SetMasterMask(G_Row, number(0)) End Sub Public Sub SetMasterMask(inrow As Integer, newcallrow As String) '获取旧模板行 If G_celltag.ContainsKey("CallRow") Then Dim s As String = G_celltag.Item("CallRow") '旧模板行清空与本行相关反馈灯设置 For r = 7 To G_grid.Rows - 1 If G_grid.Cell(r, 3).Text.Equals(s) Then Dim rowtag As Dictionary(Of String, String) = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(G_grid.Cell(r, 6).Tag) If Not IsNothing(rowtag) AndAlso rowtag.ContainsKey("CallRowA") Then Dim buf() As String = rowtag.Item("CallRowA").Split(",") Dim rtag As String = String.Empty For Each index In buf If index.Equals(G_grid.Cell(inrow, 3).Text) Then Continue For Else If String.IsNullOrEmpty(index) Then Continue For End If If String.IsNullOrEmpty(rtag) Then rtag = $"{index}," Else rtag = $"{rtag}{index}," End If End If Next Console.WriteLine(rtag) If rtag.Length > 0 Then rtag = rtag.Substring(0, rtag.Length - 1) End If Console.WriteLine(rtag) rowtag.Item("CallRowA") = rtag G_grid.Cell(r, 6).Tag = JsonConvert.SerializeObject(rowtag) End If End If Console.WriteLine(G_grid.Cell(r, 3).Text) If G_grid.Cell(r, 3).Text.Equals(newcallrow) Then Dim rowtag As Dictionary(Of String, String) = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(G_grid.Cell(r, 6).Tag) If IsNothing(rowtag) Then rowtag = New Dictionary(Of String, String) End If If Not IsNothing(rowtag) AndAlso rowtag.ContainsKey("CallRowA") Then Console.WriteLine(rowtag.Item("CallRowA")) If Not String.IsNullOrEmpty(rowtag.Item("CallRowA")) Then rowtag.Item("CallRowA") = $"{ rowtag.Item("CallRowA")},{G_grid.Cell(inrow, 3).Text}" Else rowtag.Item("CallRowA") = $"{G_grid.Cell(inrow, 3).Text}" End If Else rowtag.Add("CallRowA", G_grid.Cell(inrow, 3).Text) End If 'rowtag.Item("CallRowA") = rtag G_grid.Cell(r, 6).Tag = JsonConvert.SerializeObject(rowtag) End If Next End If End Sub Public Function chushenGridTextTONumber(text As String) As Integer Dim result As Integer = 0 Integer.TryParse(text, result) If result = 0 Then Return result result = ((result - 1) * 10) + 1 Return result End Function Public Function NumberTOchushenGridText(text As String) As String If String.IsNullOrEmpty(text) Then Return String.Empty Dim result As Integer = 0 Integer.TryParse(text, result) If result = 0 Then Return result result = result / 10 If result = 0 Then Return 1 Else result = result + 1 End If Return result End Function Public Sub GetG_celltag() If SplitContainer4.Panel2Collapsed = False AndAlso chushen_Grid.Rows > 0 Then 'G_celltag.Clear() If G_Row = 7 Then For r = 1 To chushen_Grid.Rows - 1 If String.IsNullOrEmpty(chushen_Grid.Cell(r, 1).Text) Then Dim key As String = chushen_Grid.Cell(r, 2).Text If key.Contains("Dimming gradient time") Then If G_celltag.ContainsKey(key) Then G_celltag.Item(key) = chushenGridTextTONumber(chushen_Grid.Cell(r, 3).Text) Else G_celltag.Add(key, chushenGridTextTONumber(chushen_Grid.Cell(r, 3).Text)) End If Else If G_celltag.ContainsKey(key) Then G_celltag.Item(key) = chushen_Grid.Cell(r, 3).Text Else G_celltag.Add(key, chushen_Grid.Cell(r, 3).Text) End If End If End If Next Else For r = 1 To chushen_Grid.Rows - 1 'If String.IsNullOrEmpty(chushen_Grid.Cell(r, 2).Text) Then Continue For Dim key As String = FunctionalTransformation(False, chushen_Grid.Cell(r, 1).Text) ' G_celltag.Add(key, chushen_Grid.Cell(r, 2).Text) If G_celltag.ContainsKey(key) Then G_celltag.Item(key) = chushen_Grid.Cell(r, 2).Text Else G_celltag.Add(key, chushen_Grid.Cell(r, 2).Text) End If Next End If End If End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click GetG_Result() GetG_celltag() GetGTcelltag() GetNodeResult() Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() Return End Sub Public Sub GetNodeResult() If IsNothing(DicDevicemodel) OrElse DicDevicemodel.Count = 0 Then Return End If If IsNothing(G_grid) And G_Row = 0 Then Return Dim cta = New CtabRange(G_grid, G_Row, TableColNumber.DeviceName) If String.IsNullOrEmpty(cta.devname) Then Return Dim loadtag As TableRowTag = G_ActionConfiguration(G_Row - 7) If DicDevicemodel.ContainsKey(cta.devname) Then Dim devmodw As DeviceModel = DicDevicemodel.Item(cta.devname) For Each node In devmodw.Nodes If node.Name.Equals(loadtag.G_DevNodeName) Then For Each index In node.Nodes If index.LoopAddr.Equals(loadtag.G_DevNodeIndex.ToString) Then index.DefaultClass = ComboBox2.Text End If Next End If Next End If End Sub Private Sub Cob_KeyType_TextChanged(sender As Object, e As EventArgs) Handles Cob_KeyType.TextChanged GetG_Result() SplitContainer4.Panel2Collapsed = True Select Case Cob_KeyType.Text Case "1365 All cards inserted", "2730 All cards pulled out", "1 Guest card inserted", "2 Guest card pulled out", "4 Waiter card inserted", "8 Waiter card pulled out", "256 Manager card inserted", "512 Manager cardpulled out", "1024 Engineering card inserted", "2048 Engineering card pulled out", "4096 Master card inserted", "8192 Master card pulled out", "16384 High frequency card inserted", "32768 High frequency card pulled out" ' G_Row = 7 End Select If G_Row = 7 Then initTablechushen_Grid1() Setingchushen_Grid() Else initTablechushen_Grid() AddChushen_GridRow(Cob_KeyType.Text) End If ComboBox1_DropDown(Nothing, Nothing) ComboBox1.Text = "" ComboBox1.Enabled = True If G_celltag.ContainsKey("CallRowA") Then Label5.Text = G_celltag.Item("CallRowA") ComboBox1.Enabled = False End If If G_celltag.ContainsKey("CallRow") Then Dim callrow As String = G_celltag.Item("CallRow") Dim buf() As String For Each index In SceneNumber.Keys buf = index.Split(" ") If buf(0).Equals(callrow) Then ComboBox1.Text = index End If Next End If End Sub Public Sub initTablechushen_Grid1() SplitContainer4.Panel2Collapsed = False With chushen_Grid .NewFile() .Rows = 1 .Cols = 4 .ExtendLastCol = True '.Cell(0, 1).Text = "功能名稱" '.Cell(0, 2).Text = "功能方法" .Column(3).CellType = CellTypeEnum.ComboBox .Column(1).Width = 100 .Column(2).Width = 200 .Row(0).Visible = True .Column(0).Visible = True .Column(0).Visible = False .Column(1).Locked = True .Column(2).Locked = True .Column(0).Locked = True .Column(1).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(2).Alignment = FlexCell.AlignmentEnum.CenterCenter .Column(3).Alignment = FlexCell.AlignmentEnum.CenterCenter End With Dim li As New List(Of (String, String)) li.Add(("DIMMING", "Dimming gradient time")) li.Add(("MUSIC", "Set playback volume")) addchushen_Gridrow(li) End Sub Public Sub addchushen_Gridrow(li As List(Of (String, String))) For Each node In g_BasicClasses.DeviceClass For Each index In li If index.Item1.Equals(node.Name.ToUpper) Then Select Case node.Name.ToUpper Case "DIMMING" chushen_Grid.AddItem("") chushen_Grid.Row(chushen_Grid.Rows - 1).Locked = False chushen_Grid.Cell(chushen_Grid.Rows - 1, 1).Locked = True chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = "50 Adjustable Lower limit Settings (0-100)" chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Locked = True chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 10 chushen_Grid.AddItem("") chushen_Grid.Row(chushen_Grid.Rows - 1).Locked = False chushen_Grid.Cell(chushen_Grid.Rows - 1, 1).Locked = True chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = "49 Adjustable Upper limit Settings (0-100)" chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Locked = True chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 90 chushen_Grid.AddItem("") chushen_Grid.Row(chushen_Grid.Rows - 1).Locked = False chushen_Grid.Cell(chushen_Grid.Rows - 1, 1).Locked = True chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = "48 Host dimming percentage (0-100)" chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Locked = True chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 80 Dim Nhradrow As Integer = chushen_Grid.Rows For Each Anode In node.Methods Select Case Anode.Name Case "Dimming gradient time" chushen_Grid.AddItem("") Dim hradrow As Integer = chushen_Grid.Rows - 1 chushen_Grid.Cell(hradrow, 1).Text = index.Item2 Dim valLi() As String For i = 0 To Anode.Params.Count - 1 If i > 1 Then Return Dim par As DeviceChildNodeMethodParam = Anode.Params(i) If i = 1 Then chushen_Grid.Cell(hradrow, 2 + i).Text = $"{par.Name}( 1(fast)-10 (slow) )" Else chushen_Grid.Cell(hradrow, 2 + i).Text = par.Name End If If par.Name.Equals("Set Status") Then valLi = par.DataRange.Split(",") For Each parval In valLi chushen_Grid.AddItem("") chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = parval chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Mask = MaskEnum.Digital chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 3 Next chushen_Grid.Column(1).Locked = False chushen_Grid.Range(hradrow, 1, chushen_Grid.Rows - 1, 1).MergeCells = True chushen_Grid.Column(1).Locked = True chushen_Grid.Row(hradrow).Locked = True End If Next End Select Next chushen_Grid.AddItem("") chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = "C8PLC comes with constant pressure dimming gradient time" chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 3 chushen_Grid.AddItem("") chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = "C8PLC peripheral constant voltage dimming gradient time" chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 3 chushen_Grid.Row(Nhradrow).Locked = False chushen_Grid.Column(1).Locked = False chushen_Grid.Range(Nhradrow, 1, chushen_Grid.Rows - 1, 1).MergeCells = True chushen_Grid.Column(1).Locked = True chushen_Grid.Row(Nhradrow).Locked = True Case "MUSIC" For Each Anode In node.Methods Select Case Anode.Name Case "Set playback volume" chushen_Grid.AddItem("") Dim hradrow As Integer = chushen_Grid.Rows - 1 chushen_Grid.Cell(hradrow, 1).Text = index.Item2 Dim valLi() As String For i = 0 To Anode.Params.Count - 1 If i > 1 Then Return Dim par As DeviceChildNodeMethodParam = Anode.Params(i) If i = 1 Then chushen_Grid.Cell(hradrow, 2 + i).Text = $"{par.Name}(1(small)-10(big))" Else chushen_Grid.Cell(hradrow, 2 + i).Text = par.Name End If ' If par.Name.Equals("Function settings") Then valLi = par.DataRange.Split(",") For Each parval In valLi If parval.Contains("Volume +") OrElse parval.Contains("Volume -") Then Continue For chushen_Grid.AddItem("") chushen_Grid.Cell(chushen_Grid.Rows - 1, 2).Text = parval chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Mask = MaskEnum.Digital chushen_Grid.Cell(chushen_Grid.Rows - 1, 3).Text = 6 Next chushen_Grid.Column(1).Locked = False chushen_Grid.Range(hradrow, 1, chushen_Grid.Rows - 1, 1).MergeCells = True chushen_Grid.Column(1).Locked = True chushen_Grid.Row(hradrow).Locked = True End If Next End Select Next End Select End If Next Next End Sub Private Sub Cob_CarryOutType_TextChanged(sender As Object, e As EventArgs) Handles Cob_CarryOutType.TextChanged GetG_Result() End Sub Private Sub Table_Grid1_CellChange(Sender As Object, e As Grid.CellChangeEventArgs) Handles Table_Grid1.CellChange GetG_Result() End Sub Private Sub Table_Grid1_SetCellText(Sender As Object, e As Grid.SetCellTextEventArgs) Handles Table_Grid1.SetCellText GetG_Result() End Sub Private Sub chushen_Grid_ComboDropDown(Sender As Object, e As Grid.ComboDropDownEventArgs) Handles chushen_Grid.ComboDropDown If e.Row > 0 Then Me.chushen_Grid.ComboBox(e.Col).Items.Clear() If G_Row = 7 Then If e.Row = 1 Then For index = 1 To 100 Me.chushen_Grid.ComboBox(e.Col).Items.Add(index) Next Else 'If chushen_Grid.Cell(e.Col, 2).Text.Contains("音量") Then 'ElseIf chushen_Grid.Cell(e.Col, 2).Text.Contains("时间") Then ' Me.chushen_Grid.ComboBox(e.Col).Items.AddRange({"5", "10", "20", "50", "80"}) If chushen_Grid.Cell(e.Row, e.Col - 1).Text.Equals("10 Set global volume limit") Then Me.chushen_Grid.ComboBox(e.Col).Items.AddRange({"4", "5", "6", "7", "8", "9", "10"}) Else Me.chushen_Grid.ComboBox(e.Col).Items.AddRange({"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}) End If End If Else Dim liname As String = chushen_Grid.Cell(e.Row, 1).Text Dim key As String = FunctionalTransformation(False, liname) If Dic_2.ContainsKey(key) Then Dim li As List(Of String) = Dic_2.Item(key) Me.chushen_Grid.ComboBox(e.Col).Items.AddRange(li.ToArray) End If End If End If End Sub 'Public Sub IsckeckCelltag(kettype String) ' Select Case kettype ' Case "1 点按" ' DevEvenPar("DIMMING", "控制灯光", 0) ' SplitContainer4.Panel2Collapsed = False ' Case "3 长按" ' DevEvenPar("DIMMING", "循环调光", 0) ' SplitContainer4.Panel2Collapsed = False ' Case "2 长按释放" ' End Select 'End Sub Private Sub chushen_Grid_CellChange(Sender As Object, e As Grid.CellChangeEventArgs) Handles chushen_Grid.CellChange Dim liname As String = chushen_Grid.Cell(e.Row, 2).Text Dim linamekey As String = chushen_Grid.Cell(e.Row, 1).Text Dim cvalint As Integer = -1 If e.Col = 2 Then Dim key As String = FunctionalTransformation(False, linamekey) If String.IsNullOrEmpty(liname) Then Return If Dic_2.ContainsKey(key) Then Dim li As List(Of String) = Dic_2.Item(key) For Each index In li If index.Equals(liname) Then Return End If Next chushen_Grid.Cell(e.Row, 2).Text = "" End If End If If e.Col = 3 Then Dim linameval As String = chushen_Grid.Cell(e.Row, 3).Text If Integer.TryParse(linameval, cvalint) Then If cvalint < 1 Then chushen_Grid.Cell(e.Row, 3).Text = 1 End If Dim ctx As String = chushen_Grid.Cell(e.Row, 2).Text If chushen_Grid.Cell(e.Row, 2).Text.Equals("48 Host dimming percentage (0-100)") AndAlso cvalint > 100 Then chushen_Grid.Cell(e.Row, 3).Text = 100 ElseIf chushen_Grid.Cell(e.Row, 2).Text.Equals("49 Adjustable Upper limit Settings (0-100)") AndAlso cvalint > 100 Then chushen_Grid.Cell(e.Row, 3).Text = 100 ElseIf chushen_Grid.Cell(e.Row, 2).Text.Equals("50 Adjustable Lower limit Settings (0-100)") AndAlso cvalint > 100 Then chushen_Grid.Cell(e.Row, 3).Text = 100 End If If Not chushen_Grid.Cell(e.Row, 2).Text.Equals("48 Host dimming percentage (0-100)") AndAlso Not chushen_Grid.Cell(e.Row, 2).Text.Equals("50 可调下限设置(0-100)") AndAlso Not chushen_Grid.Cell(e.Row, 2).Text.Equals("49 可调上限设置(0-100)") AndAlso cvalint > 10 Then chushen_Grid.Cell(e.Row, 3).Text = 10 End If Else If Me.chushen_Grid.ComboBox(e.Col).Items.Count > 0 Then If Me.chushen_Grid.ComboBox(e.Col).Items.Contains(linameval) Then Else chushen_Grid.Cell(e.Row, 3).Text = Me.chushen_Grid.ComboBox(e.Col).Items(0) End If End If End If End If End Sub Public SceneNumber As Dictionary(Of String, String) Private Sub ComboBox1_DropDown(sender As Object, e As EventArgs) Handles ComboBox1.DropDown ComboBox1.Items.Clear() SceneNumber.Clear() If IsNothing(G_grid) And G_Row = 0 Then Return Dim kettypebuf() As String = Cob_KeyType.Text.Trim.Split(" ") Dim loadtag As TableRowTag = G_ActionConfiguration(G_Row - 7) ComboBox1.Items.Add("") For r = 7 To G_grid.Rows - 1 If r = G_Row OrElse G_grid.Row(r).Locked Then Continue For Dim rowtag As TableRowTag = G_ActionConfiguration(r - 7) Dim buf() As String = rowtag.G_DicRow(6).Trim.Split(",") If loadtag.G_DevNodeName.Equals(rowtag.G_DevNodeName) AndAlso rowtag.G_KeyType.Contains(Cob_KeyType.Text) AndAlso kettypebuf(0).Equals(buf(0)) Then Dim sval As String = $"{G_grid.Cell(r, 3).Text } {G_grid.Cell(r, 5).Text}" If Not SceneNumber.ContainsKey(sval) Then ComboBox1.Items.Add(sval) SceneNumber.Add($"{sval}", r) End If End If Next End Sub Public Shared Function ComboBox1DateDropDown(Tgrid As Grid, mytag As TableRowTag, ActionConfiguration As List(Of TableRowTag)) As Dictionary(Of String, String) Dim dic As New Dictionary(Of String, String) dic.Clear() If IsNothing(Tgrid) Then Return dic For r = 7 To Tgrid.Rows - 1 If Tgrid.Row(r).Locked Then Continue For Dim rowtag As TableRowTag = ActionConfiguration(r - 7) Dim kettypebuf() As String = mytag.G_DicRow(6).Trim.Split(",") Dim buf() As String = rowtag.G_DicRow(6).Trim.Split(",") Dim zhixin As String = "" For Each nindex In rowtag.G_KeyType If buf(0).Equals(nindex.Substring(0, 1)) Then zhixin = nindex Exit For End If Next If kettypebuf.Length > 1 Then If mytag.G_DevNodeName.Equals(rowtag.G_DevNodeName) AndAlso mytag.G_KeyType.Contains(zhixin) AndAlso kettypebuf(0).Equals(buf(0)) Then dic.Add($"{Tgrid.Cell(r, 3).Text } {Tgrid.Cell(r, 5).Text}", r) End If Else dic.Add($"{Tgrid.Cell(r, 3).Text } {Tgrid.Cell(r, 5).Text}", r) End If Next Return dic End Function Public Sub EnableFrom(isbool As Boolean) Cob_KeyType.Enabled = isbool Cob_CarryOutType.Enabled = isbool SplitContainer4.Enabled = isbool End Sub Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged If isloadok Then If IsNothing(SceneNumber) OrElse SceneNumber.Count = 0 OrElse String.IsNullOrEmpty(ComboBox1.Text) Then G_grid.Row(G_Row).Locked = False EnableFrom(True) Return End If If SceneNumber.ContainsKey(ComboBox1.Text) Then Console.WriteLine(ComboBox1.Text) ' MsgBox("启用并联设置,将清除本行所有设置。请确认!!!", MsgBoxStyle.OkCancel) Dim row As Integer = SceneNumber.Item(ComboBox1.Text) If MsgBox("If parallel Settings are enabled, all Settings of this row are cleared. Please confirm!!!", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then ' G_grid.Range(G_Row, 7, G_Row, G_grid.Cols - 5).ClearAll() G_grid.Row(G_Row).Locked = True EnableFrom(False) Else ComboBox1.SelectedIndex = 0 G_grid.Row(G_Row).Locked = False EnableFrom(True) End If Console.WriteLine(ComboBox1.Text) Else EnableFrom(True) End If Else If String.IsNullOrEmpty(ComboBox1.Text) Then EnableFrom(True) Else EnableFrom(False) End If End If End Sub Public Sub clearcelltext(r As Integer) For c = 6 To G_grid.Cols - 1 If G_grid.Column(c).Visible = False Then Continue For G_grid.Cell(r, c).Text = "" Next End Sub End Class