Migracion
De GrialWIKI
(→Gosub/Return) |
|||
Línea 173: | Línea 173: | ||
End Class | End Class | ||
- | <code> | + | </code> |
Revisión de 03:53 7 sep 2010
Notas para la Conversión de VB6 a VB.NET
Gosub/Return
"Gosub" no esta soportado en VB.NET
Para convertir, por ejemplo un "Sub CorteControl" que utilice internamente rutinas con "Gosub" hacer lo siguiente:
- Crear una Private Class CorteControl_Class (interna, dentro de la clase actual)
- Colocar las variables generales del "Sub CorteControl" como variables privadas de la "Private Class CorteControl_Class"
- Agregar una propiedad "Dim Host As MainForm" al principio de la nueva clase
- Crear un "Sub Proc()" dentro de la clase y colocar el codigo del "Sub CorteControl"
- Crear un Sub por cada rutina de gosub que existia en el "Sub CorteControl" original
- Por Ejemplo si decia "Gosub Rutina1", crear un "Sub Rutina1" dentro de la clase
- Reemplazar los Gosub, por llamadas a los sub (eliminar la palabra gosub directamente)
- El "Sub CorteControl" original que se reemplaza debe quedar:
- Sub CorteControl()
- Dim a as New CorteControl_Class()
- a.Host = Me
- a.Proc()
- End Sub
Debido a que "CorteControl_Class" pasará a ser una "clase", no tiene acceso directo a las variables del formulario principal (MainForm). Es por eso que se crea la variable "Host as MainForm" y se asigna (a.Host = Me) antes de llamar al método "Proc"
Dentro de los subs de la clase, se debe colocar "Host." para acceder a las variables generales del Form. Para identificar dónde agrear "Host." revisar el codigo de los subs dentro de la clase buscando el siguiente error informado por el IDE de .NET: "Error 10: La referencia a un miembro no compartido requiere una referencia de objeto." Este error se soluciona agregando "Host." delante de la variable.
Por ejemplo, el siguiente codigo en VB6:
Private Sub GrialPrintOREC_gpr_PrintDocument() On Error GoTo ErrH Dim text_Renamed As String Dim CantidadEntregas As Short Dim CantidadDestinos As Short Dim ArticuloCorte As String Dim DetalleArticulo As String With GrialPrintOREC_gpr Preejec18Grq.Rst.Sort = "NumRenglon" Preejec18Grq.MovePreStart() While Preejec18Grq.NextRecord 'ubico a ver si ese renglon de la gestion esta en este compromiso If GrialPrintOREC_gpr.UserCancel Then Exit Sub If GrillaPe21Grq.Find("RELA_PREEJEC18=" & Preejec18Grq.Rst!ID_PREEJEC18) Then If ProveedorCorte <> GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Then Gosub CierraProveedor() Gosub AbreProveedor() End If ArticuloCorte = GrillaPe21Grq.Rst!PREFORM15_CODIGO & " - " & GrillaPe21Grq.Rst.Fields("PREEJEC21_DESCRI").Value End While Gosub CierraProveedor() .Printer_Advance(2) .Wt(.PrintPos_LeftMargin, encabe, 10000, Print.Align.Left_WordWrap) .Printer_Advance() End With Exit Sub AbreProveedor: ProveedorCorte = GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Return CierraProveedor: If ProveedorCorte <> "" Then 'Imprimo footer del Proveedor With GrialPrintOREC_gpr .WtCol("Cantidad", "Total: ") .WtCol("Total", VB6.Format(TotalAdjudicado, "Currency")) End With End If TotalAdjudicado = 0 Return ErrH: MsgError(GrialCont) eventArgs.Cancel = True End Sub
Debe quedar convertido para VB.NET en:
Private Sub GrialPrintOREC_gpr_PrintDocument() On Error GoTo ErrH Dim a as New GrialPrintOREC_gpr_PrintDocument_Class a.Host = Me a.Proc() Exit Sub ErrH: MsgError(GrialCont) End Sub Private Class GrialPrintOREC_gpr_PrintDocument_Class Dim Host as MainForm Dim text_Renamed As String Dim CantidadEntregas As Short Dim CantidadDestinos As Short Dim ArticuloCorte As String Dim DetalleArticulo As String Sub Proc() With Host.GrialPrintOREC_gpr Host.Preejec18Grq.Rst.Sort = "NumRenglon" Host.Preejec18Grq.MovePreStart() While Host.Preejec18Grq.NextRecord 'ubico a ver si ese renglon de la gestion esta en este compromiso If Host.GrialPrintOREC_gpr.UserCancel Then Exit Sub If Host.GrillaPe21Grq.Find("RELA_PREEJEC18=" & Preejec18Grq.Rst!ID_PREEJEC18) Then If ProveedorCorte <> GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Then CierraProveedor() AbreProveedor() End If ArticuloCorte = GrillaPe21Grq.Rst!PREFORM15_CODIGO & " - " & GrillaPe21Grq.Rst.Fields("PREEJEC21_DESCRI").Value End While CierraProveedor() .Printer_Advance(2) .Wt(.PrintPos_LeftMargin, encabe, 10000, Print.Align.Left_WordWrap) .Printer_Advance() End With End Sub Sub AbreProveedor() ProveedorCorte = GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD End Sub 'Return Sub CierraProveedor() If ProveedorCorte <> "" Then 'Imprimo footer del Proveedor With Host.GrialPrintOREC_gpr .WtCol("Cantidad", "Total: ") .WtCol("Total", VB6.Format(TotalAdjudicado, "Currency")) .Printer_Advance() End With End If Host.TotalAdjudicado = 0 End Sub 'Return End Class