Migracion
De GrialWIKI
(Página creada con '=Notas para la Conversión de VB6 a VB.NET= ==Gosub/Return== No esta soportado en VB.NET Para convertir un Sub XX que utilice internamente rutinas con "Gosub" hacer lo siguie...') |
(→Gosub/Return) |
||
Línea 3: | Línea 3: | ||
==Gosub/Return== | ==Gosub/Return== | ||
- | + | "Gosub" no esta soportado en VB.NET | |
- | Para convertir un Sub | + | Para convertir, por ejemplo un "Sub CorteControl" que utilice internamente rutinas con "Gosub" hacer lo siguiente: |
- | # Crear una Private Class | + | # Crear una Private Class CorteControl_Class (interna, dentro de la clase actual) |
- | # Colocar las variables generales del Sub | + | # Colocar las variables generales del "Sub CorteControl" como variables privadas de la "Private Class CorteControl_Class" |
- | # Crear un Sub | + | # Agregar una propiedad "Dim Host As MainForm" al principio de la nueva clase |
- | # Crear un Sub por cada rutina de gosub que existia en el Sub | + | # 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 | ## 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) | # Reemplazar los Gosub, por llamadas a los sub (eliminar la palabra gosub directamente) | ||
- | # El Sub | + | # El "Sub CorteControl" original que se reemplaza debe quedar: |
- | ## Sub | + | ## Sub CorteControl() |
- | ## Dim a as New | + | ## Dim a as New CorteControl_Class() |
- | ## a. | + | ## a.Host = Me |
+ | ## a.Proc() | ||
## End Sub | ## 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: | ||
+ | <code> | ||
+ | |||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Debe quedar convertido para VB.NET en: | ||
+ | |||
+ | <code> | ||
+ | |||
+ | 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 | ||
+ | <code> |
Revisión de 03:52 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 <code>