Autor
|
Tema: de vb 6.0 a VB.NET (Leído 34,284 veces)
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
…Bien a raíz de un comentario en algún post, es porque decidí escribir este manual El hecho de que conozcas visual Basic 6.0 no te garantiza que sepas nada en visual basic.net. ..A decir verdad Vb 6.0 fue uno de los lenguajes con el que me inicié, y como tal resultó un poco reacio probar posteriormente con otros lenguajes como C++, Pascal, .NET, Delphy, php, etc. y este manual trata de ilustrar potencialmente como migré a .NET, y las preguntas que me fui haciendo y poco a poco logrando despejarlas. Acerca de la tecnología .NET Y MicrosoftCada día Microsoft se mete más y más entre nosotros, la mayoría de usuarios domésticos usan su plataforma, los usuarios no experimentados desconocen de otros S.O., no piensen que estoy en contra de Microsoft o en favor, tampoco quiero decir que estoy en contra de la tecnología ni proclamando que la X tecnología sea la mejor, simplemente quiero dar a entender de que hay que estar a la vanguardia con las nuevas tecnologías para no quedar desfasados, ahora tenemos la tecnología .NET que según expertos dará mucho que hablar; proporcionándonos un nuevo modelo de programación orientado al gran mundo del Internet y a los smart client. Acerca del desarrollador 5 estrellasUna de las principales razones por la que se inició el programa 5 estrellas es el marketing, que es emprendendido por compañías comerciales de software, en este caso tenemos a Microsoft que no encuentra mejor manera de hacer probar su nuevo producto, capacitando a los que deciden incursionar en él para que pronto esta nueva tecnología se convierta en una necesidad de todo usuario inmerso en la globalización, este programa ofrece buenas ventajas desde el punto de vista que te facilita mucha documentación, foros de desarrollo y discusión, webcast en línea, etc. También son buenas las certificaciones que puedes obtener. Algunos enlaces:MSDN http://msdn.microsoft.com/library/spa/Ineta: http://www.ineta.org/latam/PD. Todo lo que escribo aquí no es más que un punto de vista personal.
|
|
« Última modificación: 11 Julio 2007, 06:27 am por BADBYTE-K »
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Acerca del NET FrameworkBueno si eres nuevo en la tecnología .NET te preguntarás para que fuck se tuvo que inventar este marco de trabajo, bueno hay muchas razones entre unas de las principales son; como sabrán un lenguaje que a dado mucho que hablar a sido Java por ser orientado a objetos y sobretodo por ser multiplataforma, sabemos que java necesita un motor de apoyo al cual conocemos como Virtual Machine, con el tiempo mucha gente optaba por elegir esa tecnología desplazando las propuestas de etiqueta Microsoft; el cual se vio forzado a hacer algo al respecto, empezaron con un lío judicial en el que Microsoft quería dejar impotente al Virtual Machine dentro de sus plataformas, y no logrando hacerlo. Luego apareció el NET Framework que análogamente sería algo como el Virtual Machine y que buscaría desplazarlo. Otra razón es que la tecnología .NET está pensada para el gran mundo distribuido… la INTERNET, mundo que se ha convertido en una necesidad del hombre actual y no es fundamental una PC para entrar al él, podemos hacerlo desde un Pocket PC, un móvil , etc. y .NET también pensó en esto. Ahora veamos que es el Net framework.- Aquí no pienso explayarme tanto pues no cuesta nada entrar a tu browser > digitar ‘define: NET framework’ > search y marearte con tanto resultado, yo sólo te explico lo que entiendo. Sencillamente diría que cualquier aplicación escrita en .NET no podría correr si no está instalado el NET framework, ahora yo si podría programarme una aplicación consola en un block de notas y compilarla con el NET Framework y correrla no necesitando tener instalado el .NET. dentro del framework tenemos: -Biblioteca de clases: abarca interfaces, tipos y clases; que pueden ser usadas en cualquiera de los lenguajes soportados (usando el CLS que es algo así como un traductor); sobre esto es que se construyen las aplicaciones, componentes, controles de .NET, etc. Aki tampoco podemos dejar de mencionar al espacio de nombres System al cual conocemos como tipo de datos, los más usuales en 6.0 eran Integer, Boolean, string, double. Hay tipos que no existen como el variant pero que podríamos sustituir con Object, y ahora hay que tener en cuenta que por ejemplo un integer no es simplemente un tipo de dato sino una clase al igual que las demás, en la clase integer entran a tallar otros conceptos como el unsigned que nos recurda al C++, así tenemos dentro de la categoría enteros la clase byte que es un entero de 8 bits sin signo, tenemos el int16, int32 de 16 y 32 bits con signo, así como uint16, uint32 sin signo. Ahora como podemos usarlos Si por ejemplo declaro una variable contador que no almacenara un valor muy grande uso int16 para ahorrar memoria pues cada variable ocupa un espacio en ella. Dim intCont as system.int16=0 ‘inicializo en 0 intCont +=1 ‘esto sería lo mismo que intCont=intCont+1 ‘ Messagebox.show(“El valor de contador es“ & intCont.tostring)
Como vimos; se instancia un objeto intCont de la clase int16 el cual adopto todos los métodos y propiedades de dicha clase, uno de esos métodos es tostring que haría lo mismo que hacer un cstr(intCont) - ADO.NET, un tema muy amplio, la nueva evolución de ADODB incluyendo mejor performance entre nuestros sistemas de información, mas seguridad y mejor interoperabilidad con el gestor de BD, plataforma y demás. - ASP.NET, la tecnología active service page a evolucionado ayudándonos en algunos puntos del asp convencional, y posiblemente sea el futuro de las aplicaciones, optimizado para trabajar con el IIS. -entre otros como: Ensamblados http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art109.aspComon Lenguaje Runtime http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art80.aspGDI+ http://www.elguille.info/colabora/puntoNET/tutGDI/indice.htm.Net remoting http://www.microsoft.com/spanish/msdn/articulos/archivo/091101/voices/remoting.aspWMI http://www.elguille.info/colabora/NET2005/juanlosa_ArticuloWMI.htmServicio XML y otros WEB Services http://web-services.bankhacker.com/una ventaja: cuando se programaba en 6.0 y por ejemplo empleábamos el control toolbar en el Server de nuestro troyano, y queríamos redistribuir nuestra aplicación teníamos que registrar la dll u ocx MSCOMCTL, u optar por generar el instalador. Ahora solo vasta con tener instalado el framework para usar dicha clase, y la desventaja de esto sería que los usuarios domésticos no tienen necesidad de instalar el NET Framework
|
|
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Crear una aplicación consola desde un block de notas…Bien como dije hace poco teniendo instalado el Net Framework puedo crear una aplicación de cualquier lenguaje de .NET en un notepad, ahora veamos un ejemplo, para este ejemplo necesitas saber la ruta donde está tu NET Framework (x ejemplo C:\WINDOWS\Microsoft.NET\Framework\) , en este path vemos que versión de Framework tenemos instalado si tenemos el 1.1 encontraremos algo así v1.1.4322, y si tenemos el 2 sería: v2.0.50727. ahora abrimos la consola y entramos al path por ejemplo a C:\WINDOWS\Microsoft.NET\Framework\ v1.1.4322. Abrimos el notepad y ponemos el siguiente code: Imports System Public Class Prueba Public Shared Sub Main() Dim I as Integer For I=1 To 10 Console.Writeline(I) Next I Console.Read End Sub End Class
Luego lo guardamos como prueva.vb en la carpeta del Framework. Ahora entramos a la ventana de comandos y compilamos con el siguiente comando VBC Prueba.vb, ahora vemos que se genera un Como se ve en la imagen estoy usando la versión de framework 1.1 porque ahora tengo el .NET 2003. Luego de haberlo compilado se genera un exe y es el que podemos ejecutar. Tambíen con C# { public static int main (void) { System.Console.WriteLine ("hola mundo"); return 0; } } luego la compilas csc /target:exe /out:Demo.exe Demo.cs
|
|
« Última modificación: 4 Septiembre 2012, 18:16 pm por el-brujo »
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Acerca de los lenguajes que soporta en el Net Framework Entre los lenguajes soportados tenemos a C#, Visual Basic,C++, J# ,Perl, Pyton, Fortran, Cobol entre otros,,, cómo podemos elegir por algún lenguaje de .NET, si programaste en VB6.0 puedes migrar a VB.NET, si usabas C puedes usar C# si usabas Java puedes optar por J#. El hecho de que conozcas visual Basic 6.0 no te garantiza que sepas nada en visual basic.net. Esto se da porque vb.net es un lenguaje mixto y puede soportar dicha sintaxis, pero si programamos en vb.net como 6.0 sería desperdiciar todo lo que nos brinda. VB .NET es la nueva versión de VB 6.0?VB.net cambió completamente la filosofía de programación en 6.0 pero pensó que no sería tan conveniente crear un lenguaje netamente de objetos con un estilo diferente, no hay que creer que forzó la programación estructurada a POO, la creó basándose en una sintaxis conocida por el programador de 6.0 y le dio flexibilidad para soportar la programación estructurada, pero en .NET hay que tener en cuenta que en VB.NET: no hay controles hay clases, no hay variables hay objetos, hay optional pero es mejor la sobrecarga, puedes usar composición pero existe la herencia, no hay Initialize use los constructores, olvídese de los caption ahora los objetos tendrán la propiedad text, si quiere finalizar una clase busque el método dispose. Creo que un code es mejor que cualquier prolija explicación, para este code creamos un nuevo proyecto y agregamos una clase: Imports System.Windows.Forms
Public Class objForm : Inherits Form Dim Cont As System.Int32 = 1 Public Sub New() Me.Text = "Formulario" End Sub Public Sub New(ByVal strTitulo As String) Me.Text = strTitulo & " " & Me.Cont.ToString cont += 1 End Sub Public Overloads Sub Dispose() MessageBox.Show("acabas de hacer dispose a " & Me.Text) Me.cont = 0 MyBase.Finalize() End Sub End Class
Esta clase no es más que un formulario personalizado, que hereda de la clase Windows.form por tanto hereda todo los métodos y propiedades, ahora tenemos el constructor (new) que emplea la sobrecarga(un New sin parámetro y el otro con el parámetro strTitulo), al crear un objeto con ésta clase podemos elegir a si instanciar un objeto con el título del formulario definido o por defecto. También le agregamos un sub Dispose que vendría a ser como un Unload, pero como la clase padre de la que heredamos ya tiene un método dispose, lo que hacemos es sobrecargarlo utilizando el término Overloads. Public Class botonDestruyeForm : Inherits Windows.Forms.Button Private tmp_Form_a_destruir As objForm Public Property form_a_destruir() As objForm Get Return Me.tmp_Form_a_destruir End Get Set(ByVal Value As objForm) Me.tmp_Form_a_destruir = Value End Set End Property Public Sub Cerrar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Click Me.tmp_Form_a_destruir.Dispose() End Sub End Class
La clase botonDestruyeForm hereda de la clase button, tiene un objeto tmp_form_a_destruir de la clase objForm (este objeto viene a ser el formulario desde donde se instancian los objetos de la clase botonDestruyeForm, osea el ME) este objForm puede ser asignado y leido a través de la property form_a_destruir. Luego programamos el evento click del button personalizado (botonDestruyeForm) en el cual ponemos la linea: Me.tmp_Form_a_destruir.Dispose() Que hace un llamado al sub que creamos en la clase del formulario personalizado(form): Public Overloads Sub Dispose() Ahora estamos listos para probar nuestras clases, para esto en el form inicial agregamos un button y en ponemos lo siguiente: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x As New objForm("Algunos tips .NET") x.Size = New Size(400, 100) x.Location = New Point(8, 8) x.Show() Dim objBotonDestruyeForm As New botonDestruyeForm objBotonDestruyeForm.Location = New Point(20, 9) objBotonDestruyeForm.Size = New Size(300, 20) objBotonDestruyeForm.Text = "Dispose a " & x.Text objBotonDestruyeForm.form_a_destruir = x x.Controls.Add(objBotonDestruyeForm) End Sub
Bien ahora tenemos un concepto mejor de lo que es herencia(especificaré esto mejor mas adelante) y como podemos crear objetos que hereden de las clases del net framework (form, button), usamos la sobrecarga de los métodos que traen dichas clases en las nuevas que creamos, como usar el dispose.
|
|
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Tengo buenos códigos probados y re-probados en 6.0 para qué volverlos a hacer en .NET?Bueno sería recomendable migrar el código, existen asistentes de migración de código que nos facilitan el trabajo, y también podemos usar componentes 6.0 en alguna aplicación .NET esto significa que creamos una dll en 6.0 y luego la agrego a las referencias de mi aplicación y la uso como si fuese un componente mas de mi aplicación, hasta allí no hay problemas pero si deseo transportar mi proyecto con la dll de 6.0 hay que registrarla (regsvr32 /u ‘directorio’*.dll) o generar el instalador sin embargo a veces he experimentado conflictos inesperados, pero temporales si encuentras la solución. Utilizando componentes 6.0 en .NETBien abrimos el 6.0 elegimos un proyecto DLL ActiveX y en la clase que genera ponemos esto: este code esta escrito en 6.0, lo baje de una página en donde figura como autor Javier de la Cruz - 21/11/2005 - dela.javi(at)gmail(dot)com Option Explicit Public Function cifra(UnaCadena As String, UnaLlave As String) As String Dim CadenaResultante As String Dim i As Long Dim Llave() As Integer If (Not UnaCadena = "") And (Not UnaLlave = "") Then If GeneraLlave(UnaLlave, Llave()) Then For i = 1 To Len(UnaCadena) CadenaResultante = CadenaResultante & Chr(Llave(i Mod (Len(UnaLlave) - 1), Asc(Mid(UnaCadena, i, 1)))) Next Else MsgBox "La llave debe tener al menos dos caracteres.", vbError, "" End If End If cifra = CadenaResultante End Function Public Function descifra(UnaCadena As String, UnaLlave As String) As String Dim CadenaResultante As String Dim i As Long Dim Llave() As Integer Dim Posicion As Integer If Not UnaCadena = "" Then If GeneraLlave(UnaLlave, Llave()) Then For i = 1 To Len(UnaCadena) Posicion = Asc(Mid(UnaCadena, i, 1)) - Llave(i Mod (Len(UnaLlave) - 1), 0) If Posicion > 0 Then CadenaResultante = CadenaResultante & Chr(Posicion) Else CadenaResultante = CadenaResultante & Chr(Posicion + 255) End If Next Else MsgBox "La llave debe tener al menos dos caracteres.", vbError, "" End If End If descifra = CadenaResultante End Function Private Function GeneraLlave(ByVal UnaLlave As String, ByRef Llave() As Integer) As Boolean Dim i As Integer Dim j As Integer Dim N As Integer If Len(UnaLlave) > 1 Then ReDim Preserve Llave(Len(UnaLlave) - 1, 254) For i = 1 To Len(UnaLlave) Llave(i - 1, 0) = Asc(Mid(UnaLlave, i, 1)) Next For i = 0 To Len(UnaLlave) - 1 For j = 1 To 254 N = Llave(i, j - 1) + 1 If N = 256 Then N = 1 Llave(i, j) = N Next Next GeneraLlave = True End If End Function
Al proyecto le ponemos CmpEncriptador y a la clase DCEncriptar, luego generamos la dll (CmpEncriptador.dll) y abrimos un nuevo proyecto de aplicación Windows en .NET y a las referencias agregamos Ahora vamos y Imports CmpEncriptador Dim objEncripta As New DCEncriptar MessageBox.Show(objEncripta.cifra("tips .net", "malkavian_net"))
Y la clase de 6.0 cifrará el texto, también podríamos desencriptarlo usando la misma llave. Migrando nuestro código 6.0 a VB.NETPara que la programación anterior utilize el code nativo de vb.net debemos hacer algunos cambios -FuncionesPublic Function cifra(ByVal UnaCadena As String, ByVal UnaLlave As String) As String Dim CadenaResultante As String Return CadenaResultante End Function
Si hubiese algún codigo luego del return ya no se ejecutaría pues el precompilador al llegar al return sale de la faunción, maneras de sobrellevar esto: Try 'sentencia Return CadenaResultante Finally 'aqui otras sentencias End Try
Así al dar un Return la function ejecutará lo que encuentre en el Finally, sirve mucho en algunos casos. -ArraysEn el code 6.0 se usa un arreglo: Dim Llave() As IntegerPodemos inicializar los arreglos de la siguiente manera Dim llave() As Integer = {1, 2, 3} Dim i As Byte For Each i In llave MessageBox.Show(i.ToString) Next ‘este mismo ejemplo en C# sería parecido hay que declarar int[] llave= new int[3]= {1, 2, 3}
Ya no existe la función Ubound para saber el máximo índice de un arreglo tan solo necesitamos un n.Lengt, podemos saber la dimensión del array con la propiedad Rank ,un array nos brinda una infinidad de métodos y propiedades que podemos usar a placer. - Cadenas de texto que pasó con las funciones mid, left, right, len, chr ,ascBueno la forma de trabajar con cadenas a cambiado, ahora son propiedades de todo objeto (variable) string Obtener la longitud de una cadenaObtener el asc y chr de una cadena, estos métodos son parte de la clase VisualBasic Microsoft.VisualBasic.Asc(UnaCadena) Microsoft.VisualBasic.Chr(UnaCadena)
Usar operador &=, modMod tiene la misma funcionalidad que en 6.0 Operador &= Dim str1 As String = "Hola " Dim str2 As String = "Visita el nuevo foro .NET" str1 &= str2 'el resultado: "Hola Visita el nuevo foro .NET" Usar metodos de cadenaMid(UnaCadena, i, 1)]Esta funciones podrían remplazarse por los métodos Remove o Substring unacadena.Remove([star index],[count]) unacadena.Substring([star index])
-Option ExplicitTambién tenemos esta sentencia para forzar a declarar todas las variables: Su valor podría ser Off si no queremos esta comprobación. Tambien tenemos una nueva alternativa: Option strinct nos da una regla de conversión para restringir las conversiones de datos que podrían ocacionar pérdida de datos. Tendiendo a option compare en Text entonces la letra ‘a’ minúsculas sería mayo a la letra ‘A’ mayúsculas Aquí ‘a’ = ‘A’ Estas declaraciones tienen que hacerse en la parte general -Ahora que acabamos de tratar el tema de mayúsculas y minúsculas: Si tengo a option compare en Text y me encuentro en la siguiente situación: Dim Info As MessageBox If "javier" = "Javier" Then Info.Show("Se trata del mismo nombre") Else Info.Show("No se trata del mismo nombre") End If Si por ejemplo la variable de comparación es ‘javier’ y el usuario ingresa el nombre desde una caja de texto y pone ‘Javier’; en una comparación se habla del mismo nombre, pero si está en: Option Compare Text (que está por defecto) no sería lo mismo, entonces podemos solucionarlo cambiando a Binary ó: If "javier" = "Javier".ToLower Then El método ToLower convierte al el texto del objeto en minúsculas esto es algo como un LCase y Ucase de 6.0 -Según el ejemplo estos serían los casos en que habría que cambiar, aparte de remplazar el msgbox por la clase message, y al hablar de objetos podríamos decir: if unacadena < > “” thenIf Not UnaCadena Is Nothing Then -funciones Round , Abs en .netÉstas funciones de redondeo, absoluto entre otras como coseno, seno, max,min, entre otras las tenemos en la clase Math Dim NroEntero = Math.Round(2.3333)
|
|
« Última modificación: 4 Septiembre 2012, 18:18 pm por el-brujo »
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
¿Extrañas los arreglos de controles en VB.NET?Bueno para muchos, los arreglos de controles en algunos casos nos daban eficacia y rapidez para programar, y cuando arrastré un Button a un formulario vb.net lo copie y volví a pegar para crear la matriz, pero me daba error, efectivamente no podían crearse, este VB.NET acaso no se equivocó al quitar las matrices de controles, es menos eficaz programar cada button de 20 que recorrer cada uno de ellos con una matriz ?(esto es solo un supuesto, pues se podría hacer con un for each in me.controls) ,bueno hay que recordar que ya no hay controles, sino clases y que estamos en la POO. Bueno en verdad hubo un caso en que si necesitaba urgentemente usarlos y me puse a investigar de como hacerlo, me informe bien en el MSDN y aquí les doy un ejemplo de cómo crear un array de controles: Aquí tratraremos nuevos conceptos: Herencia en vb.net:Public Class persona 'clase persona Dim nombre, telefono As String Dim edad As Integer Public Sub correr()
End Sub Public Function devuelve_edad() As Integer Return edad End Function End Class
Public Class alumno Inherits persona 'clase alumno Dim nro_matricula As String End Class Acabamos de crear dos clases persona y alumno que hereda de persona, la separamos en dos pues toda persona no tiene nro_matricula solo un alumno, consumiendo la clase: Dim Renziño As New alumno Renziño.edad = 7 Renziño.nro_matricula = "0001" Como vemos creamos un objeto de la clase alumno el cual hereda el campo edad de persona. Clase CollectionBaseEsta clase nos ayudará para crear una colección , -inflexible a tipos- System.Collections.CollectionBase ‘DETALLES DE LA CLASE [Visual Basic] MustInherit Public Class CollectionBase Implements IList, ICollection, IEnumerable [C#] public abstract class CollectionBase : IList, ICollection, IEnumerable Ahora nosotros creamos un proyecto y le agregamos una clase llamada DCArregloBotones y la haremos heredar de la clase CollectionBase, al cual le agregaremos unas cuantas funcionalidades que explicaré posteriormente. Public Class ArregloBotones : Inherits System.Collections.CollectionBase
Private pos_left As Integer Private pos_arriba As Integer Private formulario_fuente As System.Windows.Forms.Form
Public Function NuevoBoton() As System.Windows.Forms.Button Dim aButton As New System.Windows.Forms.Button Me.List.Add(aButton) formulario_fuente.Controls.Add(aButton) aButton.Top = Me.pos_arriba aButton.Left = pos_left aButton.Tag = Me.Count aButton.Text = "Button " & Me.Count.ToString AddHandler aButton.Click, AddressOf ClickHandler Return aButton End Function Public Sub New(ByVal formulario As System.Windows.Forms.Form, ByVal left As Integer, ByVal top As Integer) pos_left = left pos_arriba = top formulario_fuente = formulario End Sub Public ReadOnly Property Item(ByVal Index As Integer) As _ System.Windows.Forms.Button Get Return CType(Me.List.Item(Index), System.Windows.Forms.Button) End Get End Property Public Sub ClickHandler(ByVal sender As Object, ByVal e As _ System.EventArgs) MsgBox("Hiciste click en " & CType(CType(sender, _ System.Windows.Forms.Button).Tag, String)) End Sub End Class Luego en el form1 que se creo por defecto probamos el code, para esto agregamos un button(cmd_add). Dim cont As Integer = 20 ‘en general Private Sub cmd_add_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_add.Click Dim objControl As New ArregloBotones(Me, 100, cont) cont += 20 objControl.NuevoBoton() End Sub Bueno probamos y vemos que se van agregando botones, cada botón está en un array y al hacer click en cualquiera nos mostrará su índice. ..ahora, creo que me referí a los constructores, aquí tenenemos un ejemplo: ConstructoresPublic Sub New(ByVal formulario As System.Windows.Forms.Form, ByVal left As Integer, ByVal top As Integer) Los constructores son la analogía a los Initialize de 6.0, pero nos da mas funcionalidad, en primer lugar podemos tener sobrecarga de constructores, es decir tener dos métodos con el mismo nombre pero con diferentes parámetros, también llamado polimorfismo y así al crear mi variable e instanciarla con la clase estaré activando el constructor: Dim objControl As New ArregloBotones(Me, 100, cont) Al instanciar el objeto objControl estoy llamando al constructor el cual requiere 3 parametros, puedo hacer la siguiente sobrecarga en la clase Agregabotones: Y así al instanciar el objControl podré elegir entre usar los 3 parámetros o instanciar sin parámetros (que luego pueden asignarse desde otra manera). Ahora tengo objControl que contiene un objeto formulario, en este caso este formulario lo asignamos en el constructor, luego ya en la clase creo objetos de la clase button y los agrego al formulario Dim aButton As New System.Windows.Forms.Button formulario_fuente.Controls.Add(aButton) Luego agregamos los botones a la colección que heredo la clase, y asignamos los handles a cada control éste es un tema mas amplio bueno sender viene a ser el objeto con el que se está tratando ya sea button, combo ,etc. Y el e es el evento que ejecuta ya sea click, moumove,etc., si te preguntas porque use el msgbox fue porque no agregué las referencias de la clase message al componente.
|
|
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
ALGUNOS OTROS TIPSUbicar el paht actual El path , o el nombre del ejecutable entre otras cosas la obteníamos con app.exename, app.path En vb.net tenemos la clase application: Dim strRutaActual = Application.StartupPath Dim NombreProyecto = Application.CompanyName Obtener nombre de equipo.Ya no tenemos que usar una api o incluir un socket para saberlo, en la version del .net 2005 basta con poner my.computername, incluso hay muchas otras opciones como para reproducir un audio, etc. Esta manera es en la 2003 que es la que estoy usando Dim ObjInfoSys As SystemInformation Dim strNombrePc = ObjInfoSys.ComputerName() Llamar a un evento de algún controlBueno si te ha sucedido de que quieres ejecutar las instrucciones que están en algún evento de un control, para no volver a escribir el code (en casos de que es dificultoso usar una function claro) tienes que llamar al evento. En .net siempre hay que enviar el sender y el evento (eventargs) como parámetros, en la mayoría de casos se llaman al evento click y puedes hacerlo así: Me.Button2.PerformClick() Si quisieras llamar al evento click del button2 Si quieres hacerlo desde otro form a veces no te es permitido por el ámbito, para esto tienes que hacer lo siguiente Al crear tu formulario y llenarlo de controles, internamente el .net va generando un codigo que guarda en una Rergion #Region " Código generado por el Diseñador de Windows Forms " En esta region crea los objetos y los ajusta a las propiedades que tu le hayas asignado en tiempo de diseño al crear por ejemplo un control hace: Friend WithEvents Button2 As System.Windows.Forms.Button Para que podamos acceder a métodos y objetos desde otro ámbito, tenemos que modificar esta línea en este código para que quede así: Public Shared WithEvents Button2 As System.Windows.Forms.Button Ejecutar procesos Si en 6.0 queríamos ejecutar un proceso lo hacíamos con shell, si queríamos algo mas funcional y con mas amplitud teníamos que usar la api del shellexecute, ahora tenemos algo aún mas completo, fácil de usuar y con una variedad de nuevas opciones: System.Diagnostics.Process.Start("e:\hola.html") Listar procesosSystem.Diagnostics.Process.GetProcesses Probando cada clase de estos componentes podemos encontrar muchas cosas pues .net es tán amplio Control de erroresBueno si usaste java o un lenguaje a fin a éste sabras de que trata del try match, si no es así; recuerdas el control de errores en 6.0 ( on error go to mother fuck) Básicamente Microsoft se basó en otros lenguajes para hacer esto, dicen que .net esta basado en delphy , otros dicen que Microsoft es un copión, y otros que aprende de los demás dejo a su albedrío la definición =), ahora vamos con el control de errores Try 'sentencias Catch ex As Exception 'si las sentencias dan error Finally 'instrucciones que se ejecuten 'siempre al finalizar la trama 'en un ejemplo anterior lo expliqué mejor End Try Ahora te preguntarás porqué al producirse errores no controlados el sistema no nos especifica mucho el error, es por seguridad , pues si un atacante husmera nuestro sistema le provocaría errores intencionalmente para que el sistema le venda información técnica de lo que pasa internamente y así conocerlo y poder planear ataques, en 6.0 nos especificaba el error aquí no, pero si quieres saberlo lo haces así: Catch ex As Exception MessageBox.Show(ex.Message) Si estás en algún componente quizás tengas error al usar el messagebox, pues no tienes las referencias, puedes optar por el msgbox o agregarlas. Manipular Fechas en vb.netBueno creo que éste ejemplo lo dirá todo: Public Function CalcularEdad(ByVal Año As Integer, ByVal Mes As Int16, ByVal Dia As Int16) As Integer Dim fecha As Date Dim dia_a As Int16 = fecha.Today.Day Dim mes_a As Int16 = fecha.Today.Month Dim año_a As Integer = fecha.Today.Year If Año < año_a Then If Mes > mes_a Then Return (año_a - Año) - 1 ElseIf Mes = mes_a Then If Dia < dia_a Then Return (año_a - Año) - 1 ElseIf Dia >= dia_a Then Return (año_a - Año) End If ElseIf Mes < mes_a Then Return (año_a - Año) End If End If End Function La función anteriormente muestra como obtener el mes, año, día actual, también podrían obtenerse horas.
|
|
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Usar el registro de Windows desde VB.NETBueno para un buen uso del registro hay que conocer la clase regestry, este nos permite tener acceso a claves, subclaves y valores del registro, si conocemos el registro de Windows sabemos o habremos visto las raíces de las claves son HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE , entre otros. En la clase Regestry éstos pueden pueden ser asignados como campos que pueden ser: CurrentUser.- Almacena información sobre las preferencias de usuario. LocalMachine.-Almacena información de configuración correspondiente al equipo local. ClassesRoot .-Almacena información sobre los tipos (y clases) y sus propiedades. Users .-Almacena información sobre la configuración de usuario predeterminada. PerformanceDataAlmacena información del rendimiento de los componentes de software. CurrentConfig .-Almacena información de hardware no específica del usuario. DynData .-Almacena datos dinámicos. La clase RegestryKey.- no encuentro el término exacto para describir esta clase, pero en la ayuda la representa como un nodo de cierta clave, bueno como siempre he dicho no hay nada como mirar el code, este ejemplo crea una nueva clave: Dim objRegistro As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser objRegistro.CreateSubKey("javier") …como se muestra creo un objeto de la clase RegistryKey que viene a ser un nodo de la clave registry.CurrentUser, luego utilizo el método CreateSubKey para agregar una nueva clave llamada Javier, no confundan una clave con un valor Bueno para que no se confundan agreguemos un valor a la clave Javier (este code lo agregamos al anterior): Dim objValor As Microsoft.Win32.RegistryKey = objRegistro.OpenSubKey("javier") objValor.SetValue("apellidos", "ulloa sernaque") si queremos ahorrar code lo hubiésemos hecho así: Dim objRegistro As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("javier") objRegistro.SetValue("apellido", "ulloa") El siguiente ejemplo muestra las aplicaciones que se inician con el sistema operativo Dim objRegistro As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run") For Each valor As String In objRegistro.GetValueNames Dim tmpRegistro As Microsoft.Win32.RegistryKey = objRegistro MessageBox.Show(tmpRegistro.GetValue(valor)) Next algunos códigosfunción que valida que en un form se ingresen datos requeridos Public Function ingreso_datos_completos(ByVal objFrm As Windows.Forms.Form) As Boolean 'LOS textbox,combos que tengan el tag con el valor="*" son requeridos Dim objCtl As Control For Each objCtl In objFrm.Controls If TypeOf objCtl Is TextBox Or TypeOf objCtl Is ComboBox And objCtl.Tag = "*" Then If objCtl.Text = "" Then Return False End If Next Return True End Function funcion comprueba ataque sql injector Public Function comprueba_ataque_sql_injector(ByVal str_usuario As String) As Boolean With str_usuario If .Substring(.TrimEnd.Length - 2) = "--" Then Return True End If End With Return False End Function sub que carga una listview mand´andole un registro (sqldatareader) Public Sub cargar_listview(ByVal objlstv As ListView, ByVal registro As SqlClient.SqlDataReader) With objlstv .Columns.Clear() .Items.Clear() .GridLines = True .View = View.Details .FullRowSelect = True End With Dim i As Int16, objItem As ListViewItem With registro For i = 0 To .FieldCount - 1 objlstv.Columns.Add(.GetName(i), 100, HorizontalAlignment.Center) Next
Do While .Read objItem = objlstv.Items.Add(registro(0)) For i = 1 To .FieldCount - 1 If TypeOf (registro(i)) Is Date Then objItem.SubItems.Add(CStr(registro(i))) Else If TypeOf (registro(i)) Is String Then objItem.SubItems.Add(registro(i)) Else objItem.SubItems.Add(registro(i).ToString) End If
End If Next Loop registro.Close() End With End Sub sub que carga un combo enviándole un registro Public Sub CargarCombo(ByVal str_Registro As String, ByVal myCombo As ComboBox, ByVal CampoPrincipal As String, ByVal CampoSecundario As String, ByVal conexion As SqlClient.SqlConnection) Dim oTablaCargo As New DataTable Dim DACargo As New SqlClient.SqlDataAdapter(str_Registro, conexion) Try DACargo.Fill(oTablaCargo) Catch ex As Exception MessageBox.Show(ex.Message) End Try
myCombo.DataSource = oTablaCargo myCombo.ValueMember = CampoPrincipal myCombo.DisplayMember = CampoSecundario End Sub
|
|
|
En línea
|
a por las buenas ideas
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Arquitecturas .NEThttp://www.microsoft.com/spanish/msdn/arquitectura/das/distapp.aspAcerca de las aplicaciones Cliente – Servidor en el futuro con .NETSe predice un futuro con PC domésticas que incluyan al NET framework como un componente indispensable en el sistema operativo, como sabemos cualquier aplicación creada en .NET necesita tener como base el marco de trabajo NET framework para consumir las librerías indispensables y funcionar, entonces nos olvidaríamos de la programación de grandes API en nuestro código, ya no tendríamos que conocer el Socket Master a perfección para crear un buen Server para tu troyano (aunque se recomienda empezar con el para tener una idea sustancial de lo que el .NET hace internamente y no dejar de que las cosas nos las hagan “fáciles”) . Bueno quizás cuando tenga un poco mas de tiempo termine este manual profundizando más en Sóckets
|
|
|
En línea
|
a por las buenas ideas
|
|
|
BADBYTE-K
Knowledge is power, Diesel-K
Desconectado
Mensajes: 2.329
Aprende todo lo que este a tu alkance
|
Excelente aporte, se ha ganado una chincheta sin dudar.
Considero que es muy importante que desarrolladores vb6 aprendan algunos de los tips y conceptos que MaLkAvIaN_NeT menciona aqui.
Y pues ademas deben tener en cuenta que como informaticos debemos aceptar cambios, por supuesto cambios que vengan para bien y este es el caso de .net.
No es lujo, no es "querer estar a la vanguardia" actualizarse a .NET, en realidad podria considerarse como una necesidad lo cual nos permite seguir desarrollando soluciones adecuadas en este mundo tan globalizado de hoy en dia.
saludos
|
|
|
En línea
|
|
|
|
|
|