Demonstra Passo a passo: Recuperando informações de caixa de diálogo coletivamente usando objetos
A maioria das caixas de diálogo de Formulários do Windows têm propriedades que expõem informações para o formulário pai.Em vez de criar várias propriedades, você pode expor um grupo de dados relacionados a uma única propriedade da caixa de diálogo criando uma classe de objeto que armazena todas as informações requeridas pelo formulário pai.
O seguinte explicação passo a passo cria uma caixa de diálogo que expõe a property UserInformation contendo nome e email dados, que está disponível para o formulário pai mesmo após a caixa de diálogo ser fechada.
Para criar um caixa de diálogo que vai expor seus dados por meio de um objeto
Em Visual Studio, crie um novo projeto Formulários do Windows chamado DialogBoxObjects .Para obter mais informações, consulte Como: Criar um projeto de aplicativos do Windows.
Adicione um novo Form para o projeto e denomine-o InformationForm .Para obter mais informações, consulte Como: Adicionar um projeto Windows Forms.
Da Caixa de Ferramentas , arraste um TableLayoutPanel ao formulário.Use a marca inteligente que aparece como uma seta próxima ao controle para adicionar uma terceira linha à tabela e use o mouse para redimensionar as linhas para que todos as três sejam iguais.
Adicione um Label a cada célula de tabela na primeira coluna e um TextBox a cada célula na segunda coluna.Os controles rótulos devem ser nomeados, de cima para baixo, firstNameLabel lastNameLabel e emailLabel ; os controles TextBox devem ser nomeados firstNameText lastNameText e emailText .Quando você terminar, adicione um controle Button.Nomeie okButton e altere a property de texto em OK .
Adicione um novo arquivo de classe chamado UserInformation ao projeto.
Adicione o public qualificador para o definição de classe para tornar essa classe visível fora do namespace e adicione as definições de propriedades para as properties FirstName, LastName e EmailAddress.Quando você terminar, o código deve parecer como este:
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;
}
}
};
}
- Vá de volta para o código de InformationForm e adicionar uma property 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;
}
}
- Manipule o evento Validated em cada um dos controles TextBox, de modo que você possa atualizar a property correspondente em UserInformation sempre que alterar um dos valores.
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);
}
- Adicione manipuladores para o evento Validated para cada um dos controles TextBox no formulário, para que o valor novo desses controles seja atribuído ao UserInformation sempre que o usuário alterá-los.
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();
}
Para exibir a caixa de diálogo você criou e recuperas os dados usando um objeto
Selecione Form1 no Visual Studio.Adicione um Button para o formulário e altere sua property Name para showFormButton .
Clique duas vezes no botão para adicionar um manipulador de eventos que chama o caixa de diálogo e exibe os 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
Consulte também
Tarefas
Como: Criar caixas de diálogo em time de design
Como: fechar as caixas de diálogo e reter a entrada de usuário
Como: Recuperar informações de caixa de diálogo seletivamente usando várias propriedades
Conceitos
Entrada de Usuário em Caixas de Diálogo