viernes, 29 de mayo de 2009

Corrección de la caducación de Windows 7

Para mencionarle a todos 'testers' de Windows 7, que si tienen instalado este SO, hubo una 'mala información' acerca de la fecha de caducación en relación con las Versiones:

Como bien saben, cuando el Windows 7 caduque, se comenzará a apagar cada 2 horas hasta una determinada fecha en que no dejará entrar al sistema.

La versión Windows 7 Beta
Se empezará a apagar cada 2 horas a partir de: 1 de Julio de 2009
Expira: 1 de Agosto de 2009

La versión Windows 7 RC (Release Candidate)
Se empezará a apagar cada 2 horas a partir de: 1 de Marzo de 2010
Expira: 1 de Junio de 2010

Para los que aun no adquieren la versión de Windows 7 RC, pueden hacerlo desde AQUI (se tienen que registrar), con la novedad de que Microsoft ha anunciado que va a estar disponible en descarga hasta Julio del 2009, sin un número límite de claves.

miércoles, 27 de mayo de 2009

Dónde y Cómo aprendo .NET

Muy frecuentemente los programadores que comienzan con .NET, los que tienen problemas, o simplemente los que quieren saber más, me preguntan sobre dónde pueden aprender .NET y otras tecnologías Microsoft, pues bien, aquí mis sugerencias para todo tipo de público.
  • Estudiantes:

DCE Desarrollador 5 Estrellas: Programa de certificación en el cual vas aprendiendo por etapas, y obteniendo estrellas aprobando los distintos exámenes divididos por módulos.

MVA Microsoft Virtual Academy: Universidad Virtual de Tecnologías de Microsoft, muy bueno y obtienes grandes beneficios, puedes estudiar a tu ritmo en las distintas carreras y cursos opcionales que ofrece.

VS2008 and NET Framework 3.5 Training Kit: Ideal si lo que quieres es empezar a programar con ejemplos, demos, laboratorios virtuales.
Nota: está en inglés.

Microsoft Student Pass: Programa para aprender en línea, diseñado para los estudiantes. Muy recomendado si lo que quieres es tener bien definidos los conceptos buscando alguna certificación.

Microsoft Net Cell 2.0: Este programa busca formar grupos en las universidades para fomentar el uso y aprendizaje de la tecnología .NET, necesitas compañeros, un líder, y un maestro asesor de tu escuela.

  • Desarrolladores:

MSDN Microsoft Developer Network: Este es sitio oficial de soporte de los productos de Desarrollo de Microsoft. Aqui encuentras ayuda de las librerías, clases, videos de ejemplo, webcast, etc. sobre productos de desarrollo .NET, Web, Windows, Empresarial, para Office, para Juegos, etc.

Microsoft Connect: El sitio que Microsoft llama 'El punto de conexión entre usted y Microsoft'. Me parece un sitio muy interesante, ya que te ofrece recursos gratuitos (como iconos, imágenes, controles, librerías, etc.), además de que puedes hacer preguntas a los desarrolladores de Microsoft o algun otro, el objetivo es brindar soporte o también darlo si conoces un cierto problema y sabes como solucionarlo.

ASP.NET: Sitio oficial de la tecnología ASP.NET, encuentras webcast sobre AJAX, ASP.NET MVC, JQuery, etc.

Net Protector: Dale una mayor protección y seguridad a tus librerías y aplicaciones, con este programa, te enseñan cómo debes hacerlo.

Open XML: Conceptos, herramientas y ejemplos de esta novedosa tecnología para que puedas desarrollar e incluírla en tus desarrollos.

  • Emprendedores:

IT Pro Momentum: Si lo que quieres es probar y aprender las nuevas tecnologías Microsoft, recibir soporte técnico gratuito y poder ofertar tu proyecto, este es el programa que te conviene.

Microsoft BizSpark: Si tienes o formas parte de una empresa que está en fase de inicio y además utiliza como base las TI, este programa te puede ayudar, ya que te ofrece software y soporte técnico que necesites, todo esto gratis!!.



Existen muchísimas herramientas más en la red y por cierto, también muy buenas, pero a mi parecer, éstas son las más importantes, y sobre todo Oficiales que Microsoft nos proporciona, así que no hay pretexto... A DESARROLLAR SE HA DICHO!!!

jueves, 7 de mayo de 2009

Recorrido de todos los controles en un Form C# y VB.NET

Hace un tiempo trabajé en un proyecto en el cual quería "formatear" a los controles de un formulario, para poder ofrecer al usuario un "skin" o un tema a la aplicación, por ejemplo, que todos los controles 'label' de un formulario se colorearan de color azul, para eso lo tenía que hacer dinámicamente, ya que tenía varios formularios en la misma aplicación, y algunos cargados de distintos tipos de controles.

El recorrido de controles, se puede hacer de 2 maneras:

1. Recorriendo de manera Iterativa los controles de un control. En esta forma, sólo podemos recorrer los controles hijos de un control padre, por ejemplo, si tenemos un Form, y queremos aplicar este recorrido, entonces unicamente se recorrerá todos los controles que estén directamente agregados en el formulario y no dentro de otro control, es decir, si tenemos 3 controles dentro del Form: 1 Label, 1 GroupBox y 1 Button, pero el Label se encuentra dentro del Group Box, al hacer este recorrido, no afectará al Label, sino solo al Button y al GroupBox.


Suponiendo que tenemos este formulario, en este tipo de recorrido, cuando queramos recorrer todos los controles que tenemos en el Form1, solo recorreremos a GroupBox1 y a Button1.








2. Recorriendo de manera Recursiva TODOS los controles de un control. En esta forma se podrán recorrer todos y cada uno de los controles que esten dentro de un control padre, aún cuando algunos controles estén dentro de otro y éste a su vez de otro (esto se conoce como controles anidados), mientras formen parte del mismo control padre que establecemos, se hará dicho recorrido. Ésta es la mejor manera de hacerlo, cuando se trate de recorrer de manera DINÁMICA, es decir, cuando no se conoce ni dónde, ni cuántos controles vamos a recorrer. Cuando conozcamos su ubicación, o su tamaño, y sabemos que NO VA A CAMBIAR en el transcurso de vida de nuestra aplicación, entonces no conviene hacer un recorrido Recursivo de todos, sino almacenarlos en una colección y ahí hacer el recorrido, este tipo de recorrido es sobre una colección de elementos, en la cual conocemos su tamaño (esto lo explicaré mas adelante).

Código:

1. Recorriendo de manera Iterativa
  • C#
//Recorremos con un ciclo for each cada control que hay en la coleccion Controls de un objeto llamado 'control'

foreach(Control contHijo in control.Controls){


//Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles

contHijo.BackColor = Color.Blue;

}

  • VB.NET
'Recorremos con un ciclo for each cada control que hay en la coleccion Controls de un objeto llamado 'control'
For Each contHijo As Control In control.Controls


'Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
contHijo.BackColor = Color.Blue

Next




2. Recorriendo de manera Recursiva

  • C#
public void RecControles(Control control) {
//Recorremos con un ciclo for each cada control que hay en la colección Controls
foreach(Control contHijo in control.Controls){
//Preguntamos si el control tiene uno o mas controles dentro del mismo con la propiedad 'HasChildren'
//Si el control tiene 1 o más controles, entonces llamamos al procedimiento de forma recursiva, para que siga recorriendo los demás controles
if (contHijo.HasChildren) this.RecControles(contHijo);
//Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
contHijo.BackColor = Color.Blue;
}
}

  • VB.NET
Public Sub RecControles(ByVal control As Control)

'Recorremos con un ciclo for each cada control que hay en la colección Controls
For Each contHijo As Control In control.Controls

'Preguntamos si el control tiene uno o mas controles dentro de l mismo con la propiedad 'HasChildren'
'Si el control tiene 1 o más controles, entonces llamamos al procedimiento de forma recursiva, para que siga
'recorriendo los demás controles
If contHijo.HasChildren Then Me.RecControles(contHijo)

'Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
contHijo.BackColor = Color.Blue

Next
End Sub

Como se dan cuenta, en el recorrido de forma recursiva, se debe hacer uso de un procedimiento que haga el recorrido (de ahí su nombre, una función [o procedimiento] que se llama a sí misma, mientras que de manera iterativa lo puedes utilizar en tu código de función o procedimiento sin necesidad de declarar otra función alterna.

Ahora bien, esto lo hace de maravilla, y está bien hacerlo cuando NO conozcamos el tamaño ni la ubicación de los controles, ya que como ven, el recorrido pasa por TODOS los controles de un cierto control, pero... y qué pasa si sólo necesito los controles 'Button' que se encuentran en un formulario que, de antemano, sé que no voy a agregar otros controles, pues entonces lo que conviene es que realices una colección de esos botones y hagas el recorrido UNICAMENTE en esos controles. La colección la puedes hacer en un Array, en un objeto Collection, etc.