Skins en Visual Basic
Skins en Visual Basic
Net
Posted by Slatancrouch in Skins, Visualbasic.net on sbado 6 de junio de 2009 En este artculo veremos como darle a nuestras aplicaciones en VisialBasic.Net una vista ms esttica para el usuario, esto lo haremos con un elemento ocx, que nos permite agregar archivos con extencin *.snk que nos brindan esta posibilidad, a continuacin explicar exactamente el proceso.
VisualBasic Express 2008 (o 2005) Archivo ocx actskin4.ocx (descargarlo aqu) Comenzamos, creamos un proyecto al que llamaremos skinvb, una ves que nos muestre el form de costumbre agregaremos un label, un textbox y un botn, ahora guardamos el proyecto, en la carpeta que nos crea donde sea que este guardado, pegamos los archivos actskin4.ocx y todos los archivos skn descargaste el la carpeta Debug que esta en la carpeta bin de tu proyecto de manera que la vista de detalles sea como esta
Regresamos al espacio de trabajo, en el cuadro de herramientas damos click derecho sobre cualquier control, el que sea y elegimos la opcin "Elegir elementos...", la siguiente imagen nos ilustrar mejor
Ahora nos mostrara un cuadro de dialogo donde seleccionaremos la pestaa que dice "Componentes COM", daremos click en el botn de examinar y seleccionaremos el archivo actskin4.ocx, aceptaremos y veremos una imagen como esta donde esta el elemento recin agregado y seleccionado, luego aceptamos y regresamos al espacio de trabajo
Ahora en el cuadro de herramientas, en la seccin de controles comunes, veremos 2 componentes nuevos, "ActiveSkin Control" y "SkinLabel Class", agregaremos un control ActiveSkin Control y lo arrastraremos hasta el form, de manera que la vista ser como la siguiente ilustracin
Ese cuadro blanco que vemos, es el control que recin agregamos, nos vamos al evento load del form dando doble click sobre este, y colocamos unas lineas donde cargaremos el archivo skn que queramos y especificaremos en form al Private ByVal que Sub e lo aplicaremos, Form1_Load(ByVal As el cdigo sender ser As Handles el siguiente System.Object, MyBase.Load documentos\ True
System.EventArgs) and
Settings\Personal\Mis =
2008\Projects\skinvb\skinvb\bin\Debug\BS.skn")
Con esto acabaremos el trabajo, finalmente ejecutamos el proyecto con F5 y veremos una imagen como esta
Bastante agradable, bueno el archivo para descargar incluye mas de 80 skin listos para tu proyecto, mas esta aplicacin preparada para que pruebes todos los skin y escojas el de tu agrado, con esto finalizamos el articulo, espero les sea de ayuda. 2 Comments
Nuestra primera labor ser crear un mtodo de nombre limpia, no realizar otra tarea ms que eso, limpiar los campos, su cdigo es el siguiente
Private Sub limpia() TextBox1.Text = "" ComboBox1.Text = "-SELECCIONE-" RichTextBox1.Text = "" End Sub
Como haba mencionado, la funcin del primer botn ser la ms importante, agregar, primero pasaremos por una validacin pequea, de manera que los 3 datos requeridos se encuentren dados, despues escribiremos el
comando "insert", abriremos el pool, ejecutaremos el comando y finalmente devolvemos la conexin al pool, avisamos al usuario que la inserccin tubo xito y llamamos al mtodo limpia para que realize su trabajo, el cdigo es este
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not TextBox1.Text.Equals("".Trim) Then If Not ComboBox1.Text = "-SELECCIONE-" Then If Not RichTextBox1.Text = "".Trim Then Try query = "insert into articulo values (null, (select idmarca from marca where marca.marca = '" & ComboBox1.Text & "'), '" & TextBox1.Text & "', '" & RichTextBox1.Text & "')" con = dbpool.Open comando = New MySqlCommand(query, con) comando.ExecuteNonQuery() MsgBox("Articulo agregado") limpia() Catch ex As Exception MsgBox(ex.ToString) Finally dbpool.Close(con) End Try Else MsgBox("Agregue una descripcin") End If Else MsgBox("Seleccione una marca") End If Else MsgBox("Agregue una artculo") End If End Sub
La variable comando de la clase MysqlCommand nos permite realizar esta inserccin a la base de datos con el paso de dos parmetros, un query previamente realizado y una conexin abierta El cdigo que corresponde al botn cancelar no es mas que llamar al limpia, no tenemos ms tareas para este componente, de la siguiente forma realizar su trabajo
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click limpia() End Sub
Ahora nos vamos hacia la pestaa de consultas, modificaremos levemente su interfaz, nicamente agregaremos un botn, le daremos la etiqueta de "actualizar", este botn llevara acabo la labor de llenar las grillas cuando se requiera una actualizacin de los datos mostrados, la interfaz quedar como esto
Posteriormente definiremos un mtodo de nombre "cargar" para que llene las grillas, ustedes me dirn el Por qu? de este mtodo si para eso agregamos el botn actualizar, la explicacin es la siguiente: cuando iniciamos el programa puede que solo querramos consultar, para ahorrarnos la molestia de precionar el botn actualizar, cargaremos los datos desde el inicio de la aplicacin y nicamente utilizarmos "actualizar" cuando agreguemos nuevos artculos y estos requieran ser consultados. Antes debemos declara unas cuantas variables, el datagridview lo llenaremos con un adaptador de la clase MysqlDataAdapter, que no es ms que una tabla temporal que utilizaremos como puente para pasar los datos de la base hacia el visor, nesesitaremos tambin un dataset y un datatable, quee aran la funcin de acoplar los datos del adaptador hacia el visor de datos, la forma correcta de realizar la tarea es la siguiente
Dim adaptador As New MySqlDataAdapter Dim dataset As New DataSet Dim datatable As New DataTable Private Sub cargar() Try dataset.Clear() query = "select " + _ " articulo.idarticulo, " + _ " articulo.articulo, " + _ " marca.marca, " + _ " articulo.descripcion " + _ "from articulo " + _ "INNER JOIN marca ON marca.idmarca = articulo.idmarca" con = dbpool.Open adaptador.SelectCommand = New MySqlCommand(query, con) adaptador.Fill(dataset, "articulo") datatable = dataset.Tables("articulo") DataGridView1.MultiSelect = False DataGridView1.DataSource = datatable Catch ex As Exception MsgBox(ex.ToString) Finally dbpool.Close(con) End Try End Sub
De primera vista nos percatamos de que nuestro adaptador, dataset y datatable son instanciados al momento de definirse bajo la palabra "New", al inicio del metodo limpiamos nuestro dataset con el mtodo "Clear", escribimos nuestro query, utilizamos una conexin del pool, hacemos el comando con la propiedad del adaptador llamada "SelectCommand", mandamos dos parmetros, los mismos que para una variable de comando, un query y una conexin abierta, llenamos el dataset con el metodo "Fill" del adaptador, que requiere dos parmetros, un dataset y un nombre hacia la la base de datos temporal, ala que llamamos "articulos", luego pasamos los datos hacial el puente estndar de VisualBasic.net, el datatable, le pasamos los datos con la propiedad "Tables" del dataset, solo necesita como parmetro el nombre de la tabla requerida, en este caso nuestra tabla temporal se llama "articulos", finalmente le damos el origen de datos que debe mostrar el grid mediante su propiedad "DataSource" igualandola con el datatable que contine nuestros datos requeridos, finalmente devolvemos
nuestra conexion al pool, por ltimo debemos de llamar al mtodo "cargar" desde el evento Load de nuestro form1 y desde nuestro botn actualizar, de la siguiente manera quedar el evento del botn actualizar
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click cargar() End Sub
Ahora al momento de reallizar una inserrcin veremos unan pantalla como esta
Llegamos al final de este tema, espero les agrade y sobre todo ocupen esta opcin de conexin hacia una base de datos en sus proyectos, puede hacelerar sus consultas hasta en un 90% y si usan JOINS en sus querys sera aun mas rpido, Descargar el definitivamente proyecto es completo y una la base gran de opcin. datos aqu.
2 Comments
de conexiones, este concepto trabaja de la siguiente manera: Generamos un grupo de conexiones, cada vez que una accin de la aplicacin requiera una conexin a la base de datos, esta tomar una conexin del conjunto que tenemos, una vez que la desocupe, la devolver al pool. De esta manera no cramos objetos de conexion a cada momento, asi ahorramos memoria de clientes y servidor y mejoramos la velocidad de nuestros querys hacia la base de datos. A continuacin realizaremos una pequea aplicacin, donde manejaremos los artculos de computo, software e impresin de una tienda, implementando este concepto de pool de conexiones. Esta modesta aplicacin tendr la posibilidad de inserccin, consulta y modificacin de articulos, las herramientas necesarias son las siguientes:
Mysql Server 5.0 o superior En mysql creamos una base de datos con el nombre "dbarticulos", crearemos las tablas marca y articulos, marca con los atributos idmarca, marca y descripcion y artuculos, con idarticulo, idmarca, artculo y descripcion, nuestro enlace ser idmarca, asi que ser nuestra llave foranea, el escript el es siguiente:
CREATE TABLE `dbarticulos`.`marca` ( `idmarca` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `marca` VARCHAR(45) NOT NULL, `descripcion` VARCHAR(45) NOT NULL, PRIMARY KEY (`idmarca`) ) ENGINE = InnoDB; CREATE TABLE `dbarticulos`.`articulo` ( `idarticulo` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `idmarca` INTEGER UNSIGNED NOT NULL, `articulo` VARCHAR(45) NOT NULL, `descripcion` VARCHAR(45) NOT NULL, PRIMARY KEY (`idarticulo`), CONSTRAINT `FK_articulo_1` FOREIGN KEY `FK_articulo_1` (`idmarca`) REFERENCES `marca` (`idmarca`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB;
Una vez creada la base de datos, insertaremos los siguientes valores en la tabla "marca"
idmarca marca descripcion -----------------------------------------------------1 HP impresoras y computadoras 2 Microso.. software y computadoras 3 Appl. computadoras -----------------------------------------------------Creamos un nuevo proyecto en vb.net, una aplicacin para Windows, al que llamaremos "polldbarticulos", una vez creado agregaremos una clase a el proyecto, con el nombre "dbpool", luego agregaremos las referencias necesarias en nuestro esplorador, click derecho y elegmos agragar referencia, nos desplegara la siguiente pantalla:
Una ves agregada, vamos hacia la clase dbpool, importamos las libreras de MySql.Data.MySqlClient, posteriormente declaramos una variable de tipo String que ser nuestra cadena de conexin y una variable de tipo MysqlConnection, ambas sern estticas; finalmente declararemos dos metodos, uno sub y otro function, la clase final quedar de la siguiente manera:
Imports MySql.Data.MySqlClient Public Class dbpool Private Shared cadena As String = "Server=localhost; User Id=root;Password=tupassword;Persist Security Info=True; Database=dbarticulos" Public Shared con As MySqlConnection Public Shared Function Open() As MySqlConnection Try con = New MySqlConnection(cadena) con.Open() Catch ex As Exception Close(con) MsgBox("Error" & ex.ToString) End Try Return con End Function Public Shared Sub Close(ByVal con As MySqlConnection) If con.State = ConnectionState.Open Then Try con.Close() con = Nothing Catch ex As Exception MsgBox("Error" & ex.ToString) End Try End If End Sub End Class
Notese que en la funcin Open, creamos las conexiones disponibles y tambin las abrimos y finalmente las devolvemos para ser utilizadas, en el metodo Close, verificamos si la conexin esta en uso; si es as, la cerramos; si ya esta cerrada la devolvemos al pool; la parte grfica es sencilla, agregaremos un control de Tabs con 2 pestaas, una de Alta y otra de Consulta, en la parte de Alta quedar de la suguiente manera:
Finalmente en el evento Load del Frame, seleccionaremos todas las marcas de la base de datos, con un elemento MysqlConnection, MysqlCommand, MysqlDataReader y un String para escribir nuestros querys, pero no es como de costrumbre, el siguiente cdigo nos dira la manera correcta:
Imports MySql.Data.MySqlClient Public Class Form1 Dim con As MySqlConnection Dim query As String Dim comando As MySqlCommand Dim lector As MySqlDataReader Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try query = "select marca from marca" con = dbpool.Open comando = New MySqlCommand(query, con) lector = comando.ExecuteReader While lector.Read ComboBox1.Items.Add(lector.GetString(0)) End While dbpool.Close(con) Catch ex As Exception MsgBox(ex.ToString) Finally lector.Close() End Try End Sub End Class
Notese que con la l nea con = dbpoll.Open ya tenemos una conexin del pool automaticamente y con la lnea dbpool.Close(con), devolvemos la conexin al conjunto que tenemos de estas, lo dems es lo de siempre, con esto no debemos de tener ningn tipo de problema, una vez que probemos la aplicacin, veremos una imagen parecida a esta:
Este es el fin del primer artculo, en el siguiente veremos la insercin de datos. Si quieres pudedes bajar el proyecto hasta este punto para aclarar todas tus dudas aqu.