Migracion
De GrialWIKI
(→El evento "CheckedChanged" se puede disparar cuando se inicializa el formulario) |
(→El evento "CheckedChanged" se puede disparar cuando se inicializa el formulario) |
||
Línea 217: | Línea 217: | ||
End Sub | End Sub | ||
+ | </code> | ||
+ | |||
+ | ==Cambia la forma de manejar fechas, el tipo "Date"== | ||
+ | |||
+ | En VB.NET se almacenan diferente las fechas. | ||
+ | |||
+ | Ya no funciona Int(Now) para obtener el dia sin Horas y Minutos | ||
+ | |||
+ | En lugar de '''Int(Now)''' hay que usar ahora: '''Now.Date''' | ||
+ | |||
+ | Para cualquier campo tipo Date se puede usar '''.Date''' para obtener | ||
+ | el dia sin Horas y Minutos. | ||
+ | |||
+ | ===Ejemplo=== | ||
+ | <code> | ||
+ | Private Sub Test_Dates | ||
+ | |||
+ | Dim d1, d2 As Date | ||
+ | d1 = #3/30/2005 8:00:00 AM# | ||
+ | d2 = #3/30/2005 1:20:00 PM# | ||
+ | |||
+ | Debug.Print(d1 & ", " & d2) ' Imprime: 30/03/2005 8:00:00, 30/03/2005 13:20:00 | ||
+ | Debug.Print(d1 = d2) ' Imprime: False | ||
+ | Debug.Print(d1.Date & ", " & d2.Date) ' Imprime: 30/03/2005, 30/03/2005 | ||
+ | Debug.Print(d1.Date = d2.Date) ' Imprime: True | ||
+ | |||
+ | |||
+ | End Sub | ||
</code> | </code> |
Revisión de 18:46 10 sep 2010
Contenido |
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.
Ejemplo
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 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 Public 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 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
El evento "CheckedChanged" se puede disparar cuando se inicializa el formulario
Lamentablemente el .NET dispara el evento "Changed" de un checkbox o un OptionButton cuando esta haciendo el New del objeto, es decir, mientras se inicializan los controles del Form, e incluso el objeto ni siquiera esta adjunto al Form.
En dichos eventos hay que evitar procesar si el Form aun no está cargado. Hay que ubicar las lineas del tipo:
Private Sub MultiBenefChk_CheckStateChanged( ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MultiBenefChk.CheckStateChanged
Que seria:
Private Sub *_CheckStateChanged( ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles *.CheckStateChanged
y en la primer linea de ese sub, agregar:
If Not Created Then Exit Sub
"Created" es una propiedad del Form que esta en False antes de que se muestre el form.
Quedaria por Ejemplo:
Private Sub MultiBenefChk_CheckStateChanged( ByVal eventSender As System.Object , ByVal eventArgs As System.EventArgs) Handles MultiBenefChk.CheckStateChanged If Not Created Then Exit Sub OcultarMostrar_Segun_MultiBenef() End Sub
Cambia la forma de manejar fechas, el tipo "Date"
En VB.NET se almacenan diferente las fechas.
Ya no funciona Int(Now) para obtener el dia sin Horas y Minutos
En lugar de Int(Now) hay que usar ahora: Now.Date
Para cualquier campo tipo Date se puede usar .Date para obtener el dia sin Horas y Minutos.
Ejemplo
Private Sub Test_Dates Dim d1, d2 As Date d1 = #3/30/2005 8:00:00 AM# d2 = #3/30/2005 1:20:00 PM# Debug.Print(d1 & ", " & d2) ' Imprime: 30/03/2005 8:00:00, 30/03/2005 13:20:00 Debug.Print(d1 = d2) ' Imprime: False Debug.Print(d1.Date & ", " & d2.Date) ' Imprime: 30/03/2005, 30/03/2005 Debug.Print(d1.Date = d2.Date) ' Imprime: True End Sub