Programación General > Visual Basic 6.0 e inferiores
[peticion] Asignar Valores A Propiedades
(1/1)
wakowarner:
Estoy desesperado!!!
Necesito de su ayuda para asignar las propiedades a un control que estoy haciendo.
tengo un control llamado VSG, este control tiene como trompecientas propiedades, muchas muy semejantes que se diferencia solo por un numero, hasta aqui todo bien, ahora tambien tengo un timer que refresca el valor de dichas propiedades para cada control (este control es un array), el problema es que esta funcion hace un ciclo for para actualizar cada propiedad y segun el nombre de una etiqueta el programa decide a que propiedad se asigna el valor, pero como hay varias parecidas quisiera que con una sentencia IF instr("nombre parcial de la tag", decida a que propiedad se asigne el valor, les pongo parte de la rutina resumida para que vean de que hablo
--- Código: Text --- For i = 1 To OPCGroupItemsCls.Count Set OPCItemToUpdate = OPCGroupItemsCls.Item(Str(i)) ItemValue = OPCItemToUpdate.GetItemValue(1) ItemID = OPCItemToUpdate.GetItemID Call FindRoute(ItemID, IDChannel, IDDevice, IDTag) For j = 1 To VSGIndex If VSG(j).Channel = IDChannel And VSG(j).Device = IDDevice Then Select Case IDTag Case "Mach" VSG(j).Mach = ItemValue Case "LampGreen" VSG(j).Lampgreen = ItemValue Case "LampRed" VSG(j).LampRed = ItemValue Case "LampAmber" VSG(j).LampAmber = ItemValue Case "DT1000" VSG(j).DT1000 = ItemValue Case "DT1001" VSG(j).DT1001 = ItemValue Case "DT1002" VSG(j).DT1002 = ItemValue Case "DT1003" VSG(j).DT1003 = ItemValue Case "DT1004" VSG(j).DT1004 = ItemValue Case "DT1005" VSG(j).DT1005 = ItemValue Case "BadWeld" VSG(j).Badweld = ItemValue Case "DropedParts" VSG(j).DropedParts = ItemValue Case "EpoxyLosses" VSG(j).EpoxyLosses = ItemValue Case "TwistedAnodes" VSG(j).TwistedAnodes = ItemValue Case "EmptyPockets" VSG(j).EmptyPockets = ItemValue Case "Case" Select Case ItemValue Case 1 VSG(j).Size = "D" Case 2 VSG(j).Size = "B" Case 4 VSG(j).Size = "A" Case 8 VSG(j).Size = "C" Case 16 VSG(j).Size = "X" End Select Case "StopBit" If VSG(j).Lampgreen = False And VSG(j).ErrorCode = "" And ItemValue = True Then VSG(j).ErrorCode = "R166" VSG(j).ErrorDescription = "Stop Button Pressed" End If Case "BitLdframe" If Monitor = False Then Dim Direccion As String Direccion = IDChannel & "." & IDDevice If ItemValue = True And VSG(j).LdfrmFlag = 0 Then VSG(j).Leadframe = "" Call UpdateItem(Direccion & ".ErrLdframe", 1) ElseIf ItemValue = True And VSG(j).LdfrmFlag = 1 Then Call UpdateItem(Direccion & ".ErrLdframe", 0) Call UpdateItem(Direccion & ".BitLdframe", 0) ElseIf ItemValue = False Then VSG(j).LdfrmFlag = 0 End If End If Case "Batchreset" If ItemValue = True Then Call UpdateItem(IDChannel & "." & IDDevice & ".Batchreset", 0) End If Case "BatchLoaded" If Monitor = False Then Dim Direccion1 As String Direccion1 = IDChannel & "." & IDDevice & ".BatchLoaded" If Len(VSG(j).Batch) = 0 And VSG(j).DT1002 > 0 Then Call UpdateItem(Direccion1, 1) Else Call UpdateItem(Direccion1, 0) End If End If Case "LdframeYield" If ItemValue < 1001 Then 'Para no guardar un valor falso del inicio VSG(j).LeadFrameYield = ItemValue / 10 End If End Select
hay una parte donde las propiedades van desde .Welder01 hasta .Welder20 y como no quiero hacer un select quisiera hacer algo como...
[CODE]
If Instr(TAG,"Welder") then
VSG(j).<aqui va algo> = itemvalue
endif
--- Citar ---
lo que quiero saber es si es posible hacer una coleccion con las propiedades del objeto o una especie de puntero de tal manera que el codigo sepa a que de los welder debe asignarsele el valor, no se si me explico, si quieren puedo adjuntar el archivo, aunque dudo que lo puedan hacer correr sin una API que necesita
Saludos!!
--- Fin de la cita ---
Brroz:
Hola wakowarner.
Así por las buenas se me ocurre que puedes definir en tu control VSG la propiedad WELDER como si de una matriz se tratase. Suponiendo, por ejemplo que el tipo de WELDER fuese long, en el control:
--- Código: Text --- Private lWelder(20) As Long Public Property Let Welder(Byval Index As Integer, Byval Valor As Long) If Index >= 0 and Index < 20 Then lWelder(Index) = ValorEnd Property Public Property Get Welder(Byval Index As Integer) As Long If Index >= 0 and Index < 20 Then Welder = lWelder(Index)End Property
Y ya luego, algo así:
--- Código: Text --- if Left(TAG, 6) = "Welder" Then _ VSG(j).Welder(Val(Mid(TAG, 7))) = itemValue
Espero que te sirva.
Chao.
wakowarner:
Funciona!!! :rolleyes:
Muchas gracias! B)
Navegación
Ir a la versión completa