Procédure pas à pas : récupération collective des informations des boîtes de dialogue à l'aide d'objets

La plupart des boîtes de dialogue Windows Forms ont des propriétés qui exposent des informations au formulaire parent. Plutôt que de créer plusieurs propriétés, vous pouvez exposer un groupe de données relationnelles par le biais d'une seule propriété de boîte de dialogue en créant un objet de classe qui stocke toutes les informations nécessaires par le formulaire parent.

La procédure pas à pas suivante crée une boîte de dialogue qui expose une propriété UserInformation contenant le nom et les données d'adresse de messagerie, qui sont disponibles au formulaire parent même après la fermeture de la boîte de dialogue.

Pour créer une boîte de dialogue qui va exposer ses données par l'intermédiaire d'un objet

  1. Dans Visual Studio, créez un nouveau projet Windows Forms appelé DialogBoxObjects. Pour plus d'informations, consultez Comment : créer un projet d'application Windows.

  2. Ajoutez un nouveau Form au projet et nommez-le InformationForm. Pour plus d'informations, consultez Comment : ajouter des Windows Forms à un projet.

  3. À partir de la Boîte à outils, faites glisser un contrôle TableLayoutPanel dans le formulaire. Utilisez la balise active qui apparaît sous la forme d'une flèche en regard du contrôle pour ajouter une troisième ligne à la table, et utilisez la souris pour redimensionner les lignes afin que toutes les trois soient identiques.

  4. Ajoutez un Label à chaque cellule du tableau dans la première colonne, et un TextBox à chaque cellule dans la deuxième colonne. Les contrôles Label doivent être nommés, de bas en haut, firstNameLabel, lastNameLabel et emailLabel ; les contrôles TextBox doivent être nommés firstNameText, lastNameText et emailText. Lorsque vous êtes terminé, ajoutez un contrôle Button. Nommez-le okButton et remplacez la propriété Text par OK.

  5. Ajoutez un nouveau fichier de classe nommé UserInformation au projet.

  6. Ajoutez le qualificateur public à la définition de classe pour rendre cette classe visible en dehors de son espace de noms et ajoutez des définitions de propriété pour les propriétés FirstName, LastName et EmailAddress. Lorsque vous avez terminé, votre code doit se présenter de la manière suivante :

Public Class UserInformation
    Private _FirstName As String = ""
    Private _LastName As String = ""
    Private _EmailAddress As String = ""

    Public Property FirstName() As String
        Get
            Return _FirstName
        End Get
        Set(ByVal value As String)
            _FirstName = value
        End Set
    End Property


    Public Property LastName() As String
        Get
            Return _LastName
        End Get
        Set(ByVal value As String)
            _LastName = value
        End Set
    End Property


    Public Property EmailAddress() As String
        Get
            Return _EmailAddress
        End Get
        Set(ByVal value As String)
            _EmailAddress = value
        End Set
    End Property
End Class
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;
            }
        }
    }
}
using namespace System;
using namespace System::Collections::Generic;
using namespace System::Text;

namespace DialogBoxObjects
{
    public ref class UserInformation
    {
    public:
        UserInformation()
        {
            firstNameValue = "";
            lastNameValue = "";
            emailAddressValue = "";
        }
    private:
        String^ firstNameValue;
    private:
        String^ lastNameValue;
    private:
        String^ emailAddressValue;
    public:
        property String^ FirstName
        {
            String^ get()
            {
                return firstNameValue;
            }
            void set( String^ value )
            {
                firstNameValue = value;
            }
        }
    public:
        property String^ LastName
        {
            String^ get()
            {
                return lastNameValue;
            }
            void set( String^ value )
            {
                lastNameValue = value;
            }
        }
    public:
        property String^ EmailAddress
        {
            String^ get()
            {
                return emailAddressValue;
            }
            void set( String^ value )
            {
                emailAddressValue = value;
            }
        }
    };
}
  1. Revenez au code pour InformationForm, et ajoutez une propriété UserInformation.
Public ReadOnly Property UserInformation() As UserInformation
    Get
        Return _UI
    End Get
End Property
public UserInformation UserInformation
{
    get
    {
        return (_ui);
    }
}
public:
    property DialogBoxObjects::UserInformation^ UserInformation
    {
        DialogBoxObjects::UserInformation^ get()
        {
            return this->userInformation;
        }
    }
  1. Gérez l'événement Validated sur chacun des contrôles TextBox afin que vous puissiez mettre à jour la propriété correspondante sur UserInformation à chaque modification de valeur.
Private Sub FirstNameText_Validated(ByVal sender As Object, ByVal e As EventArgs) Handles FirstNameText.Validated
    Dim FirstNameTemp As String = FirstNameText.Text.Trim()
    If FirstNameText.Text.Trim().Length > 0 Then
        _UI.FirstName = FirstNameTemp
    End If
End Sub

Private Sub LastNameText_Validated(ByVal sender As Object, ByVal e As EventArgs) Handles LastNameText.Validated
    Dim LastNameTemp As String = LastNameText.Text.Trim()
    If LastNameText.Text.Trim().Length > 0 Then
        _UI.LastName = LastNameTemp
    End If
End Sub

Private Sub EmailText_Validated(ByVal sender As Object, ByVal e As EventArgs) Handles EmailText.Validated
    Dim EmailTemp As String = EmailText.Text.Trim()
    If EmailTemp.Length > 0 Then
        _UI.EmailAddress = EmailTemp
    End If
End Sub
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;
    }
}
    private:
        void FirstNameText_Validated(Object^ sender, EventArgs^ e)
        {
            String^ firstName = firstNameText->Text->Trim();
            if (firstName->Length > 0)
            {
                userInformation->FirstName = firstName;
            }
        }

    private:
        void LastNameText_Validated(Object^ sender, EventArgs^ e)
        {
            String^ lastName = lastNameText->Text->Trim();
            if (lastName->Length > 0)
            {
                userInformation->LastName = lastName;
            }
        }

    private:
        void EmailText_Validated(Object^ sender, EventArgs^ e)
        {
            String^ email = emailText->Text->Trim();
            if (email->Length > 0)
            {
                userInformation->EmailAddress = email;
            }
        }

    private:
        void CloseFormButton_Click(Object^ sender, EventArgs^ e)
        {
            if (userInformation->FirstName->Length == 0)
            {
                MessageBox::Show("First name cannot be zero-length.");
                return;
            }
            if (userInformation->LastName->Length == 0)
            {
                MessageBox::Show("Last name cannot be zero-length.");
                return;
            }
            if (userInformation->EmailAddress->Length == 0)
            {
                MessageBox::Show("Email address cannot be zero-length.");
                return;
            }

            this->DialogResult = ::DialogResult::OK;
            this->Hide();
        }




#pragma region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
    private:
        void InitializeComponent()
        {
            this->tableLayoutPanel1 = 
                gcnew System::Windows::Forms::TableLayoutPanel();
            this->firstNameLabel = gcnew System::Windows::Forms::Label();
            this->lastNameLabel = gcnew System::Windows::Forms::Label();
            this->emailLabel = gcnew System::Windows::Forms::Label();
            this->firstNameText = gcnew System::Windows::Forms::TextBox();
            this->lastNameText = gcnew System::Windows::Forms::TextBox();
            this->emailText = gcnew System::Windows::Forms::TextBox();
            this->closeFormButton = gcnew System::Windows::Forms::Button();
            this->tableLayoutPanel1->SuspendLayout();
            this->SuspendLayout();
            //
            // tableLayoutPanel1
            //
            this->tableLayoutPanel1->ColumnCount = 2;
            this->tableLayoutPanel1->ColumnStyles->Add(
                gcnew System::Windows::Forms::ColumnStyle(
                System::Windows::Forms::SizeType::Percent, 33.98533F));
            this->tableLayoutPanel1->ColumnStyles->Add(
                gcnew System::Windows::Forms::ColumnStyle(
                System::Windows::Forms::SizeType::Percent, 66.01467F));
            this->tableLayoutPanel1->Controls->Add(this->firstNameLabel, 0, 0);
            this->tableLayoutPanel1->Controls->Add(this->lastNameLabel, 0, 1);
            this->tableLayoutPanel1->Controls->Add(this->emailLabel, 0, 2);
            this->tableLayoutPanel1->Controls->Add(this->firstNameText, 1, 0);
            this->tableLayoutPanel1->Controls->Add(this->lastNameText, 1, 1);
            this->tableLayoutPanel1->Controls->Add(this->emailText, 1, 2);
            this->tableLayoutPanel1->Location = System::Drawing::Point(33, 30);
            this->tableLayoutPanel1->Name = "tableLayoutPanel1";
            this->tableLayoutPanel1->RowCount = 3;
            this->tableLayoutPanel1->RowStyles->Add(
                gcnew System::Windows::Forms::RowStyle(
                System::Windows::Forms::SizeType::Percent, 50.0F));
            this->tableLayoutPanel1->RowStyles->Add(
                gcnew System::Windows::Forms::RowStyle(
                System::Windows::Forms::SizeType::Percent, 50.0F));
            this->tableLayoutPanel1->RowStyles->Add(
                gcnew System::Windows::Forms::RowStyle(
                System::Windows::Forms::SizeType::Absolute, 41.0F));
            this->tableLayoutPanel1->Size = System::Drawing::Size(658, 116);
            this->tableLayoutPanel1->TabIndex = 0;
            //
            // firstNameLabel
            //
            this->firstNameLabel->Anchor = 
                System::Windows::Forms::AnchorStyles::None;
            this->firstNameLabel->AutoSize = true;
            this->firstNameLabel->Location = System::Drawing::Point(82, 11);
            this->firstNameLabel->Name = "firstNameLabel";
            this->firstNameLabel->Size = System::Drawing::Size(59, 14);
            this->firstNameLabel->TabIndex = 0;
            this->firstNameLabel->Text = "First Name";
            //
            // lastNameLabel
            //
            this->lastNameLabel->Anchor = 
                System::Windows::Forms::AnchorStyles::None;
            this->lastNameLabel->AutoSize = true;
            this->lastNameLabel->Location = System::Drawing::Point(82, 48);
            this->lastNameLabel->Name = "lastNameLabel";
            this->lastNameLabel->Size = System::Drawing::Size(59, 14);
            this->lastNameLabel->TabIndex = 1;
            this->lastNameLabel->Text = "Last Name";
            //
            // emailLabel
            //
            this->emailLabel->Anchor = 
                System::Windows::Forms::AnchorStyles::None;
            this->emailLabel->AutoSize = true;
            this->emailLabel->Location = System::Drawing::Point(73, 88);
            this->emailLabel->Name = "emailLabel";
            this->emailLabel->Size = System::Drawing::Size(77, 14);
            this->emailLabel->TabIndex = 2;
            this->emailLabel->Text = "Email Address";
            //
            // firstNameText
            //
            this->firstNameText->Anchor = 
                System::Windows::Forms::AnchorStyles::None;
            this->firstNameText->Location = System::Drawing::Point(339, 8);
            this->firstNameText->Name = "firstNameText";
            this->firstNameText->Size = System::Drawing::Size(203, 20);
            this->firstNameText->TabIndex = 3;
            //
            // lastNameText
            //
            this->lastNameText->Anchor = 
                System::Windows::Forms::AnchorStyles::None;
            this->lastNameText->Location = System::Drawing::Point(339, 45);
            this->lastNameText->Name = "lastNameText";
            this->lastNameText->Size = System::Drawing::Size(202, 20);
            this->lastNameText->TabIndex = 4;
            //
            // emailText
            //
            this->emailText->Anchor = 
                System::Windows::Forms::AnchorStyles::None;
            this->emailText->Location = System::Drawing::Point(336, 85);
            this->emailText->Name = "emailText";
            this->emailText->Size = System::Drawing::Size(208, 20);
            this->emailText->TabIndex = 5;
            //
            // closeFormButton
            //
            this->closeFormButton->Location = System::Drawing::Point(550, 211);
            this->closeFormButton->Name = "closeFormButton";
            this->closeFormButton->Size = System::Drawing::Size(141, 23);
            this->closeFormButton->TabIndex = 1;
            this->closeFormButton->Text = "OK";
            this->closeFormButton->Click += gcnew System::EventHandler(this,
                &InformationForm::CloseFormButton_Click);
            //
            // InformationForm
            //
            this->AutoScaleDimensions = System::Drawing::SizeF(6.0F, 13.0F);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(744, 258);
            this->Controls->Add(this->closeFormButton);
            this->Controls->Add(this->tableLayoutPanel1);
            this->Name = "InformationForm";
            this->Text = "User Information";
            this->tableLayoutPanel1->ResumeLayout(false);
            this->tableLayoutPanel1->PerformLayout();
            this->ResumeLayout(false);

        }

#pragma endregion

    public:
        InformationForm()
        {
            userInformation = gcnew DialogBoxObjects::UserInformation;

            components = nullptr;
            InitializeComponent();

            firstNameText->Validated += gcnew EventHandler
                (this, &InformationForm::FirstNameText_Validated);
            lastNameText->Validated += gcnew EventHandler(this, 
                &InformationForm::LastNameText_Validated);
            emailText->Validated += gcnew EventHandler(this, 
                &InformationForm::EmailText_Validated);
        }
  1. Ajoutez les gestionnaires pour l'événement Validated à chacun des contrôles TextBox sur votre formulaire, afin que la nouvelle valeur de ces contrôles soit assignée à UserInformation toutes les fois que l'utilisateur les modifie.
Private Sub closeFormButton_Click(ByVal sender As Object, ByVal e As EventArgs)
    If _UI.FirstName.Length = 0 Then
        MessageBox.Show("First name cannot be zero-length.")
        Exit Sub
    End If
    If _UI.LastName.Length = 0 Then
        MessageBox.Show("Last name cannot be zero-length.")
        Exit Sub
    End If
    If _UI.EmailAddress.Length = 0 Then
        MessageBox.Show("Email address cannot be zero-length.")
        Exit Sub
    End If

    Me.DialogResult = System.Windows.Forms.DialogResult.OK
    Me.Close()
End Sub
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();
}
private:
    void CloseFormButton_Click(Object^ sender, EventArgs^ e)
    {
        if (userInformation->FirstName->Length == 0)
        {
            MessageBox::Show("First name cannot be zero-length.");
            return;
        }
        if (userInformation->LastName->Length == 0)
        {
            MessageBox::Show("Last name cannot be zero-length.");
            return;
        }
        if (userInformation->EmailAddress->Length == 0)
        {
            MessageBox::Show("Email address cannot be zero-length.");
            return;
        }

        this->DialogResult = ::DialogResult::OK;
        this->Hide();
    }

Pour afficher la boîte de dialogue créée et récupérer les données à l'aide d'un objet

  1. Sélectionnez Form1 dans Visual Studio. Ajoutez un Button au formulaire, et remplacez sa propriété Name par showFormButton.

  2. Double-cliquez sur le bouton pour ajouter un gestionnaire d'événements qui appelle la boîte de dialogue et affiche les résultats.

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

Voir aussi

Tâches

Comment : créer des boîtes de dialogue au moment du design
Comment : fermer les boîtes de dialogue et conserver les données entrées par l'utilisateur
Comment : récupérer de manière sélective des informations des boîtes de dialogue à l'aide de plusieurs propriétés

Concepts

Données entrées par l'utilisateur dans les boîtes de dialogue

Autres ressources

Boîtes de dialogue dans les Windows Forms