23 dic 2008

Tipos anónimos en .Net

Los tipos anónimos son una nueva característica de .Net que utilizada junto a LINQ nos brinda grandes ventajas a la hora de escribir nuestro código.

Primero que nada, deberemos chequear que la opción Option Infer esté habilitada en nuestro proyecto. Para ello iremos a Propiedades del proyecto, en la pestaña Compilación. Por supuesto, al principio podremos tener algunos problemas si también utilizamos la opción Option Srtict, pero es cuestión de costumbre.

Volviendo a los tipos anónimos, al escribir una sentencia en LINQ, podremos definirnos una variable sin tipo y a pesar de ello tener intellisense.

Por ejemplo:

//C#
var hola = from x in myDdatacontext.table1
where x.id > 20
select x;


'VB.Net

Dim Hola = From x in MyDataContext.Table1 _
Where x.Id > 20 _
Select x


En realidad nuestras variables Hola, tomarán, en este caso el tipo IQueriable(Of Table1) con lo cual podremos ir navegando a través de los items devueltos por la consulta.

Suponiendo que Table1 tiene los campos Id, Nombre y Apellido, al escribir x. el intellisense nos mostrará como proiedades Id, Nombre y Apellido. Y de igual manera, cuando recorremos nuestras variables de tipos anónimos podremos ver el intellisense y acceder a cada propiedad, por ejemplo:

'VB.Net
For Each x in Hola
Console.Writeline(String.Format("ID: {0} Nombre: {1} Apellido: {2}", x.Id, x.Nombre, x.Apellido))
Next


Otra forma, sería si quisiéramos devolver el primer elemento del resultado de la consulta, entonces:

' VB.Net
Return Hola.First

22 nov 2008

Microsoft Beginner Developer Learning Center

Microsoft ha publicado una serie de tutoriales y videos orientados a los nuevos programadores, la idea es enseñarles programación utilizando la serie Express de herramientas para programar .Net.

11 sept 2008

Nueva Academia Virtual de Microsoft

Microsoft Virtual Academy - mva

Microsoft ha lanzado una nueva Academia Virtual llamada Microsoft Virtual Academy. En la misma presentan cursos para aprender y para actualizarse seleccionando una carrera, igual que una academia real.

MVA es una forma gratuita de capacitarse, puediendo anotarte en varios cursos y carreras, en los cuales irás obteniendo puntos según tu desempeño con los cuales podrás solicitar una membresía, obtener descuentos y varios beneficios más.

Enlace: mva

28 ago 2008

Como mostrar un dialogo de confirmación antes de cerrar la ventana

Es lo más común, se va a cerrar una ventana, pero se han editado datos y no se han guardado. En ese caso es muy conveniente utilizar un diálogo con los botones Si, No, Cancelar, los cuales utilizaremos para Guardar los cambios, Descartarlos o cancelar el cerrado de la ventana respectivamente.

Lo primero que necesitamos es alguna rutina o bandera que nos indique si se han realizado cambios en nuestra ventana, para este ejemplo será una variable de tipo Boolean que se seteará en True cada vez que se modifique un dato.

Luego escribiremos una rutina en el manejador del evento FormClosing de nuestro Form que mostrará el diálogo y dependiendo de la respuesta del usuario realizará una acción:

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Me.HayCambios Then
Dim respuesta As DialogResult = MessageBox.Show("Hay cambios pendientes, desea guardarlos antes de salir?", "Cambios pendientes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)
Select Case respuesta
Case Windows.Forms.DialogResult.Yes
Me.GuardarArchivoComo()
Case Windows.Forms.DialogResult.No
'Descartar los cambios
Case Windows.Forms.DialogResult.Cancel
e.Cancel = True
End Select
End If
End Sub


Mostrar un diálogo de confirmación antes de cerrar la ventana

21 ago 2008

Función recursiva para limpiar todas las cajas de texto de un Form

Siempre es necesario limpiar cajas de texto en un form, por ejemplo después de cierta acción queremos dejar todas las cajas de texto vacías... pues qué mejor que tener una función que las busque todas??

Public Sub LimpiarCajas(Controls as System.Windows.Forms.Control.ControlCollection)
For each c as Control in Controls
If Not c.Controls Is Nothing AndAlso c.Controls.Count > 0 Then
LimpiarCajas(c.Controls)
ElseIf c.GetType().Equals(GetType(TextBox)) Then
CType(c, TextBox).Text = ""
End If
Next
End Sub


Este procedimiento puede ser muy útil si se lo ubica en un módulo público, de manera que pueda ser utilizado desde cualquier parte de nuestra aplicación. Aunque si trabajan con el framework 3.5 pueden utilizar métodos de extensión como explican en Nuevos Programadores.