Guía de Diseño y prácticas de WPF – Silverlight para Visual Basic

El equipo de P&P acaba de lanzar las versiones de guías rápidas, laboratorios y como se hace,  para los desarrolladores en Visual Basic, ello nos va a permitir aproximarnos y familiarizarnos al uso de las librerías de aplicaciones compuestas.


Su lectura es altamente recomendada y cabe destacar la gran calidad de código.


http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=537da1cd-43e1-4799-88e7-a1da9166fb46


Espero vuestros comentarios.
Pep Lluis,

Como enlazar columnas de una tabla SQL a unos ‘TextBox’

‘ En respuesta a la pregunta de como añadir o modificar registros


‘ a una tabla de SQL con bindings sin DGV y al viejo estilo ADO.



‘ Utilizaremos solo las columnas de Nombre y Telefono de la tabla ‘Shippers’


‘ Despues de insertar un nuevo registro, deberemos utilizar el boton


‘ de actualizar para que dichos cambios sean actualizados a la BD.


‘ En caso de modificacion solo necesitaremos llamar a la ‘actualizacion’


 


Imports System.Data


Imports System.Data.SqlClient


 


Public Class Form1


   


    ‘Constructores para el acceso a la tabla ‘Shippers’ y su correspondiente BindingSource


    Private MiConexion As New SqlConnection( _


               “Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Temp\Northwind\NORTHWND.MDF” + _


               “;Integrated Security=True;Connect Timeout=30;User Instance=True”)


 


    Private MiDataSet As New DataSet()


    Private MiAdaptador As New SqlDataAdapter(“SELECT * FROM Shippers”, MiConexion)


    Private MiEnlazador As New BindingSource


 


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


       


        ‘ Panel conteniendo los textbox para la entrada/modificacion


        Dim Nombre As New TextBox


        Dim Telefono As New TextBox


 


        Dim marcoDatos = New FlowLayoutPanel


        marcoDatos.Dock = DockStyle.Top


        marcoDatos.Controls.AddRange(New Control() {Nombre, Telefono})


        Me.Controls.AddRange(New Control() {marcoDatos})


 


       


        ‘ Panel conteniendo los botones de control


        Dim Avanza As New Button


        Dim Retrocede As New Button


        Dim Insertar As New Button


        Dim Actualizar As New Button


        Dim Controles As New FlowLayoutPanel


        Controles.Dock = DockStyle.Bottom


        Retrocede.Text = “<- Re”


        Avanza.Text = “Av ->”


        Insertar.Text = “Insertar”


        Actualizar.Text = “Actualizar”


        Controles.Controls.AddRange(New Control() {Retrocede, Avanza, Insertar, Actualizar})


        Me.Controls.AddRange(New Control() {Controles})


       


        ‘ Asignar el evento a las funciones de cada boton de control


        AddHandler Retrocede.Click, AddressOf retroceder


        AddHandler Avanza.Click, AddressOf Avanzar


        AddHandler Insertar.Click, AddressOf Nuevo


        AddHandler Actualizar.Click, AddressOf Actualizacion


       


        ‘ Conexion, relleno y asignacion del enlace a datos


        MiConexion.Open()


        MiAdaptador.Fill(MiDataSet)


        MiEnlazador.DataSource = MiDataSet.Tables(0)


        Dim Micommandbuilder As New SqlCommandBuilder(Me.MiAdaptador)


       


        ‘ Enlace de los TextBox a sus omologos en la tabla


        Dim EnlaceNombre As New Binding(“Text”, MiEnlazador, “CompanyName”)


        Nombre.DataBindings.Add(EnlaceNombre)


        Dim EnlaceDireccion As New Binding(“Text”, MiEnlazador, “Phone”)


        Telefono.DataBindings.Add(EnlaceDireccion)


    End Sub


    ‘ Avanzar un registro dentro del ‘recordset’ :-)


    Sub Avanzar()


        MiEnlazador.MoveNext()


    End Sub


    ‘ Retroceder un registro


    Sub retroceder()


        MiEnlazador.MovePrevious()


    End Sub


    ‘Crear un nuevo registro


    Sub Nuevo()


        MiEnlazador.AddNew()


    End Sub


    ‘ Actualizar el registro en curso o el recien creado


    Sub Actualizacion()


        MiEnlazador.EndEdit()


        MiAdaptador.Update(CType(Me.MiEnlazador.DataSource, DataTable))


    End Sub


End Class


Saludos,
Pep Lluis,

PERFORISTO – Un juego de algo riesgo. – Ensayo (En Serio y En Broma)

 Tarajeta Precedentes.


Después de un tremendo 2008 donde el exceso de trabajo y la rampa de inversiones colmaban a las empresas de jornadas con horarios sinfín y turnos continuados (la mayoría de nosotros) pasamos a la triste, preocupante y ridícula situación de temer por nuestro futuro. Bajo la bandera de una desgastada crisis, se escudan todo tipo de argumentaciones que nos conducen a un camino donde se entremezclan sentimientos agridulces,  temerosos y de desanimo, sentimientos que para colmo se llevan la poca alegría que de forma natural recargamos con nuestra ilusión y pasión por la tecnología.


En estos momentos en que los  augurios positivos para el próximo año y las buenas intenciones no traen ningún tipo de trabajo a casa, algunos de nosotros despiertos a altas horas de la madrugada intentamos reconciliar nuestras vidas con la situación actual y el futuro que nos espera (ni que explicar nada del futuro para los que casi cumplimos medio siglo, porque de entrar en ese tema, seguro que todos terminamos llorando). En esas introvertidas incursiones a nuestros interiores mientras los demás duermen, recordé aquellos años en los que me inicie en la informática, recién cumplidos mis dieciséis. Acudí a un centro de cálculo para realizar unas duras pruebas de admisión! No solo se trataba de demostrar un brillante cociente intelectual, sino que además se debían demostrar unas desarrolladas habilidades tanto en mecanografía o conocimiento en electrónica.


En mi caso, con 12 años ya había experimentado con lámparas electrónicas, intentando construir alguna que otra radio, aunque lamentablemente creo que nunca conseguí sintonizar emisora alguna durante más de dos minutos. Recuerdo con mucho cariño mi primer invento. Se trataba de dos láminas gruesas de madera en forma de ‘sandwich con varios orificios en los que incorpore unos rodamientos con sus respectivos muelles para que cada uno sirviera de contacto en una lámina metálica incrustada en el otro extremo, dejando entre ambas una pequeña rendija por donde podía introducirse un cartón. Esos contactos servían como conmutadores eléctricos de una serie de bombillas y dispositivos diversos de mi pequeño laboratorio. Fabricando diferentes configuraciones de cartulinas podía aislar alternativamente los circuitos que me interesaba, en función a si en esa posición disponía de un orificio, dejando que el rodamiento hiciera contacto o no, de esa forma insertando tarjetas de cartón podía escoger el ambiente que me interesaba para una determinada zona o época del año… incluyendo ventilador o calefacción… así que disponía de una cartulina para verano otra para invierno, otra para cuando necesitaba mucha luz, otra para las ‘partys’… creo que ese fue mi primer POgrama… qué tiempos aquellos!.


Volviendo al tema. A los 16 y para mi primer trabajo, realice y supere con éxito mi primer ‘psicotécnico’, sin embargo la suerte no me acompaño en la prueba de mecanografía y no pude ser admitido en el departamento de perforistas por no teclear lo suficientemente rápido o carecer de las pulsaciones mínimas requeridas para un buen “Perforisto” (aunque visto en perspectiva ¡menuda suerte!). Debo confesar que mis 20 primeros años con la informática fueron a dos dedos L. Supongo que mi pericia con la electrónica, fue de peso determinante y el pasaporte para que el director de recursos humanos pensara en mí, como la inversión en un pequeño seguro o dicho de otra forma el chico ‘apañado’ para resolver las frecuentes averías que por entonces estaban a la orden del día… ahora 15 minutos funcionando, ahora 10 parados de sin luz, ahora 20 minutos sin trabajar porque se atasco la lectora, ahora espera 5 minutos para poner bien el papel enredado en los tambores, ahora necesito 40 minutos ecualizando el condenado modem de 1200 baudios… si yo os contara!, por lo tanto mi primer trabajo se rentabilizaba entre otras tareas, resolviendo rápida y efectivamente ese pequeños montón de incidentes.


En todo el tiempo que estuve empleado en aquella empresa, nunca pude restituir a mi pesar la dignidad profesional de un buen tecleador, siempre pensando que nunca seria capaz de digitar a las pulsaciones mínimas requeridas a cualquier empleado que se preciara.


… En esas introvertidas incursiones a nuestros interiores mientras los demás duermen, recordé que todas aquellas personas que en su momento habían encontrado un buen empleo como perforistas (considerado un empleo de futuro y para toda la vida), hacia ya muchos años que no tenían ni oficio, ni beneficio, que realmente se quedaron sin trabajo! Y sin embargo un montón de pendejos como yo a dos dedos, continúanos ejerciendo después de más de 30 años.


Conclusión:


Las personas (como todo lo que nos rodea en este mundo) nacen se desarrollan y mueren, la tragedia no está en cómo termina la vida, sino en la manera que se interpreta. Cómo se vive, es asunto nuestro y aprovecharlo es aceptar cualquier situación de forma natural venga como venga y de donde venga.


Mi madre siempre me decía ..


“Al mal tiempo buena cara!” porque en el fondo “No hay mal que por bien no venga!”.


O sea que a ponerse las pilas, nuestras tecnologías de la información están significando más que la última revolución industrial. Crisis? Que Crisis?, mientras no perdamos la imaginación siempre encontraremos donde inspirarnos para fundamentar las bases del futuro, donde sin lugar a dudas la sociedad de la información representa ya un eslabón primordial para el funcionamiento del mundo actual. Ahora más que nunca las tecnologías de la información deben demostrar que sus profesionales son capaces de propiciar el tirón económico que necesitamos… y eso lo digo a pesar de que este “vuestro humilde servidor” probablemente se quede sin trabajo. Jajajaja.


… Por si acaso voy a ponerme a trabajar en un Juego increíble… efectivamente ¡PERFORISTO!, durante esas interminables noches de crisis he diseñado un “Personal Trainer!”, con esta potente herramienta  esta vez no suspenderé la prueba de admisión para “Perforista”.


Podéis descargaros el ejecutable, aunque será open-source, las condiciones que os pido para que este Juego pueda triunfar son que me mostréis vuestro interés a través del apartado [Contact] al inicio del Blog. De esa forma me comprometo para poder realizar mejoras en tanto a memorizar resultados, frases, tiempos ,records, poder realizar competiciones entre diferentes jugadores, competiciones ‘on line’… y todas esas cosas típicas de los Juegos. Eso si pensando en que a partir de ahora con “PERFORISTO” ya no será necesario realizar un intensivo de mecanografía.


Cuidaros mucho este 2009 y suerte para todos en 2010.
Pep Lluis,


Perforisto

Como Enumerar los Com’s de nuestro equipo en Vb y en C#

Contestando a la pregunta de Meta, sobre el código en VB:


Me.ComboBox1.Items.AddRange(My.Computer.Ports.SerialPortNames.ToArray)


‘ En el evento SelectedIndexChanged… del ComboBox1


PuertoSerie.Close()
PuertoSerie.PortName = ComboBox1.SelectedItem
PuertoSerie.Open()


<Meta>
Mi pregunta es, ¿puedes hacer lo mismo en Visual C#?
Creo que falta más detalle en la explicación, ya que deseo que en el comboBox tenga el COM1 y COM2 para seleccionar. … vb no lo interpreto bien.


private System.Windows.Forms.ComboBox comboBox1;


private System.IO.Ports.SerialPort PuertoSerie;


 


public Form1()


{


InitializeComponent();


      this.comboBox1 = new System.Windows.Forms.ComboBox();


      // comboBox1


      this.comboBox1.FormattingEnabled = true;


      this.comboBox1.Name = “comboBox1″;


      this.Controls.Add(this.comboBox1);


}


 


private void Form1_Load(object sender, EventArgs e)


{
      // GetPortNames, nos devuelve un array con los nombres


      // de los puertos instalados en nuestro equipo

String[] Ports = System.IO.Ports.SerialPort.GetPortNames();

      this.comboBox1.Items.AddRange(Ports);

}

 

// En el evento SelectedIndexChanged… del ComboBox1

{     

      // … Por ejemplo
      PuertoSerie.Close();

      PuertoSerie.PortName = this.comboBox1.SelectedItem.ToString();

      PuertoSerie.Open();

}

 

En el ejemplo anterior para no crear confusión he incluido la parte de añadir el comboBox al form, de esa forma le podemos seguir la pista. También puedes inicializar directamente los ítems del combo , pero he preferido utilizar el array ‘Ports’ para diferenciar la operación. De esa forma quizás sean más inteligible.

Saludos,
Pep Lluis,

Enviar datos en hex por el puerto serie.

A la pregunta:


è Necesitaría información de cómo enviar datos en hex por el puerto serie, porque por defecto lo hace en ASCII.


Realmente la información no se envía en ASCII por defecto, si no en función al ‘Encoding’ utilizado. En realidad estamos serializando un Byte…


        Dim MiPuerto = My.Computer.Ports.OpenSerialPort(“COM1″)


        MiPuerto.Write(&HFF)    ‘Enviar valor hex FF


        Dim Valor As Byte = 255


        MiPuerto.Write(Valor)   ‘Enviar byte 255



En ambos casos enviaremos ocho bits ‘1111 1111’ si utilizamos una longitud de 8, por lo que el DTE recibirá el valor binario 255.


En determinadas situaciones, el micro controlador espera que le mandemos los ‘nibbles’ encapsulados en ASCII, o sea para enviarle el valor de 8 bits, necesitaremos su representación hexadecimal en forma de dos Bytes ASCII, por ejemplo los caracteres ‘7’ y ‘F’ para el valor 127, por lo tanto estaremos mandando 16bits de datos para representar un valor hexadecimal de 8bits.


En tal caso simplemente especificaremos


        Valor = 127


        MiPuerto.Write(Hex(Valor))


 


En este supuesto el micro controlador recibirá ‘7F’, correspondiente al valor binario 127.


No dudéis en continuar esta conversación si la explicación no resulta lo suficientemente clara.
Pep Lluis,