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.

13 ago 2008

Como usar ErrorProviders para informar al usuario

Un ErrorProvider es un componente que se utiliza para informar al usuario de manera gráfica que ha ocurrido un error, en lo personal me gusta utilizarlo para mostrar errores de validación, por ejemplo cuando el usuario deja en blanco un campo obligatorio, ingresa letras en un campo numérico, etc.

Lo que hacemos es agregar un ErrorProvider a nuestro Form, desde el tab "Componentes" nuestra Toolbox. Luego cada vez que hacemos una validación, o cuando deseemos mostrar que hubo un error en cierto control, utilizamos el método SetError(control as System.Windows.Forms.Control, value as String) del objeto ErrorProvider.

Donde ubicar el componente ErrorProvider

Por lo tanto una función de validación de 2 campos obligatorios que muestre un ErrorProvider cuando el usuario no complete un campo se vería de la siguiente manera:

Private Function ValidarDatos() As Boolean
Dim resultado As Boolean = False

Me.ErrorProvider1.Clear() ' "Limpliamos" el ErrorProvider para que oculte los errores anteriores

If Me.ComboBox1.SelectedIndex <> -1 Then ' Si seleccionó un item del ComboBox
If Me.TextBox1.Text <> "" Then ' Si ingresó algo en la TextBox
'Hacer más validaciones o controles
resultado = True
Else
Me.ErrorProvider1.SetError(Me.TextBox1, "Debe ingresar un valor.") ' Muestra el ErrorProvider asociado al control TextBox1
End If
Else
Me.ErrorProvider1.SetError(Me.cmbField1, "Debe seleccionar una propiedad.")
End If

Return resultado
End Function


Como usar un ErrorProvider en VB.NET