Tutorial: Recuperar la información de un cuadro de diálogo colectivamente mediante objetos

Actualización: noviembre 2007

La mayoría de los cuadros de diálogo de los formularios Windows Forms tienen propiedades que exponen información al formulario primario. En lugar de crear varias propiedades, puede exponer un grupo de datos relacionados a través de una propiedad de cuadro de diálogo mediante la creación de un objeto de clase que almacena toda la información necesaria para el formulario primario.

El tutorial siguiente crea un cuadro de diálogo que expone una propiedad UserInformation que contiene los datos de nombre y dirección de correo electrónico, disponible en el formulario primario incluso después de que se haya cerrado el cuadro de diálogo.

Para crear un cuadro de diálogo que exponga sus datos mediante un objeto

  1. En Visual Studio, cree un nuevo proyecto de formularios Windows Forms denominado DialogBoxObjects. Para obtener más información, vea Cómo: Crear un proyecto de aplicación para Windows.

  2. Agregue un nuevo Form al proyecto y denomínelo InformationForm. Para obtener más información, vea Cómo: Agregar formularios Windows Forms a un proyecto.

  3. En el Cuadro de herramientas, arrastre un control TableLayoutPanel al formulario. Utilice la etiqueta inteligente que aparece como una flecha junto al control para agregar una tercera fila a la tabla, y utilice el mouse para cambiar el tamaño de las filas de tal forma que las tres sean iguales.

  4. Agregue Label a cada celda de tabla de la primera columna y TextBox a cada celda de la segunda columna. Los controles de etiqueta se deben denominar, de arriba abajo, firstNameLabel, lastNameLabel y emailLabel; los controles TextBox se deberían denominar firstNameText, lastNameText y emailText. Cuando finalice, agregue un control Button. Denomínelo okButton y cambie la propiedad Text a Aceptar.

  5. Agregue al proyecto un nuevo archivo de clase denominado UserInformation.

  6. Agregue el calificador public a la definición de clase para hacer visible esta clase fuera de su espacio de nombres, y agregue definiciones de la propiedad a las propiedades FirstName, LastName y EmailAddress. Cuando finalice el procedimiento, el código puede tener esta apariencia:

using System;
using System.Collections.Generic;
using System.Text;

namespace DialogBoxObjects
{
    public class UserInformation
    {
        private string _firstName = "";
        private string _lastName = "";
        private string _emailAddress = "";

        public string FirstName
        {
            get
            {
                return (_firstName);
            }
            set
            {
                _firstName = value;
            }
        }

        public string LastName
        {
            get
            {
                return (_lastName);
            }
            set
            {
                _lastName = value;
            }
        }

        public string EmailAddress
        {
            get
            {
                return (_emailAddress);
            }
            set
            {
                _emailAddress = value;
            }
        }
    }
}


  1. Vuelva al código para InformationForm y agregue una propiedad UserInformation.

public UserInformation UserInformation
{
    get
    {
        return (_ui);
    }
}


  1. Controle el evento Validated en cada uno de los controles TextBox para que pueda actualizar la propiedad correspondiente en UserInformation cuando cambie uno de los valores.

public InformationForm()
{
    InitializeComponent();

    firstNameText.Validated += new EventHandler(firstNameText_Validated);
    lastNameText.Validated += new EventHandler(lastNameText_Validated);
    emailText.Validated += new EventHandler(emailText_Validated);
}

void firstNameText_Validated(object sender, EventArgs e)
{
    string firstNameTemp = firstNameText.Text.Trim();
    if (firstNameText.Text.Trim().Length > 0)
    {
        _ui.FirstName = firstNameTemp;
    }
}

void lastNameText_Validated(object sender, EventArgs e)
{
    string lastNameTemp = lastNameText.Text.Trim();
    if (lastNameText.Text.Trim().Length > 0)
    {
        _ui.LastName = lastNameTemp;
    }
}

void emailText_Validated(object sender, EventArgs e)
{
    string emailTemp = emailText.Text.Trim();
    if (emailTemp.Length > 0)
    {
        _ui.EmailAddress = emailTemp;
    }
}


  1. Agregue controladores al evento Validated para cada uno de los controles TextBox en el formulario, para que el nuevo valor de esos controles se asigne a UserInformation cuando el usuario los cambia.

private void closeFormButton_Click(object sender, EventArgs e)
{
    if (_ui.FirstName.Length == 0)
    {
        MessageBox.Show("First name cannot be zero-length.");
        return;
    }
    if (_ui.LastName.Length == 0)
    {
        MessageBox.Show("Last name cannot be zero-length.");
        return;
    }
    if (_ui.EmailAddress.Length == 0)
    {
        MessageBox.Show("Email address cannot be zero-length.");
        return;
    }

    this.DialogResult = DialogResult.OK;
    this.Hide();
}


Para mostrar el cuadro de diálogo que ha creado y recuperar los datos mediante un objeto

  1. Seleccione Form1 en Visual Studio. Agregue Button al formulario y cambie su propiedad Name a showFormButton.

  2. Haga doble clic en el botón para agregar un controlador de eventos que llame al cuadro de diálogo y muestre los resultados.

Private Sub ShowFormButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShowFormButton.Click
    Dim InfoForm As New InformationForm()
    Dim dr As DialogResult = InfoForm.ShowDialog()
    If dr = System.Windows.Forms.DialogResult.OK Then
        Dim Txt As String = "First Name: " & InfoForm.UserInformation.FirstName + ControlChars.Cr + ControlChars.Lf
        Txt &= "Last Name: " & InfoForm.UserInformation.LastName + ControlChars.Cr + ControlChars.Lf
        Txt &= "Email Address: " & InfoForm.UserInformation.EmailAddress

        MessageBox.Show(Txt)
    End If

    InfoForm.Dispose()
End Sub


Adiciones de comunidad

Mostrar: