チュートリアル : オブジェクトによるダイアログ ボックス情報の一括取得

更新 : 2007 年 11 月

ほとんどの Windows フォーム ダイアログ ボックスには、情報を親フォームに公開するプロパティがあります。複数のプロパティを作成する代わりに、親フォームに必要なすべての情報を格納するクラス オブジェクトを作成すると、単一のダイアログ ボックスにより関連するデータのグループを公開できます。

次のチュートリアルでは、名前と電子メール アドレスのデータを格納する UserInformation プロパティを公開するダイアログ ボックスを作成します。このプロパティは、ダイアログ ボックスを閉じた後でも親フォームから使用できます。

オブジェクトをとおしてデータを公開するダイアログ ボックスを作成するには

  1. Visual Studio で、DialogBoxObjects という名前の新しい Windows フォーム プロジェクトを作成します。詳細については、「方法 : Windows アプリケーション プロジェクトを作成する」を参照してください。

  2. 新しい Form をプロジェクトに追加し、「InformationForm」という名前を付けます。詳細については、「方法 : プロジェクトに Windows フォームを追加する」を参照してください。

  3. ツールボックスから、フォームに TableLayoutPanel をドラッグします。コントロールの横に矢印として表示されているスマート タグを使用して、3 番目の行をテーブルに追加します。次に、マウスを使用して、3 つの行がすべて等しくなるように行のサイズを変更します。

  4. 最初の列の各テーブル セルに Label を追加し、2 番目の列の各セルに TextBox を追加します。Label コントロールには、上から下に、firstNameLabel、lastNameLabel、emailLabel という名前を付けます。TextBox コントロールには、firstNameText、lastNameText、および emailText という名前を付けます。次に、Button コントロールを追加します。このコントロールには、okButton という名前を付け、Text プロパティを OK に変更します。

  5. UserInformation という名前の新しい Class ファイルをプロジェクトに追加します。

  6. public 修飾子をクラス定義に追加して、このクラスをその名前空間外で参照できるようにします。次に、FirstName、LastName、および EmailAddress の各プロパティのプロパティ定義を追加します。完成したコードは次のようになります。

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. InformationForm のコードに戻り、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. TextBox コントロールの Validated イベントを処理して、値のいずれかが変更されるたびに、UserInformation の対応するプロパティを更新できるようにします。
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. フォーム上の各 TextBox コントロールに Validated イベントのハンドラを追加して、ユーザーがこのコントロールを変更するたびに、コントロールの新しい値が UserInformation に割り当てられるようにします。
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();
    }

作成したダイアログ ボックスを表示し、オブジェクトを使用してデータを取得するには

  1. Visual Studio で、[Form1] をクリックします。フォームに Button を追加し、その Name プロパティを showFormButton に変更します。

  2. このボタンをダブルクリックして、ダイアログ ボックスの呼び出しと結果の表示を行うイベント ハンドラを追加します。

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

参照

処理手順

方法 : デザイン時にダイアログ ボックスを作成する

方法 : ダイアログ ボックスを閉じて、ユーザー入力を保持する

方法 : 複数のプロパティを使用してダイアログ ボックス情報を個別に取得する

概念

ダイアログ ボックスへのユーザー入力

その他の技術情報

Windows フォームのダイアログ ボックス