Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
La maggioranza delle finestre di dialogo di Windows Form dispongono di proprietà per l'esposizione di informazioni al form padre. Anziché creare più proprietà, è possibile esporre un gruppo di dati correlati tramite una singola proprietà della finestra di dialogo creando un oggetto classe che archivia tutte le informazioni necessarie al form padre.
Nella seguente procedura dettagliata viene creata una finestra di dialogo che espone una proprietà UserInformation che include dati relativi a nome e indirizzo di posta elettronica, disponibile al form padre anche dopo la chiusura della finestra di dialogo.
Per creare una finestra di dialogo che esponga i propri dati attraverso un oggetto
In Visual Studio creare un nuovo progetto Windows Form denominato DialogBoxObjects. Per ulteriori informazioni, vedere Procedura: creare un progetto applicazione Windows.
Aggiungere un nuovo oggetto Form al progetto e denominarlo InformationForm. Per ulteriori informazioni, vedere Procedura: aggiungere Windows Form a un progetto.
Dalla Casella degli strumenti trascinare nel form un oggetto TableLayoutPanel. Utilizzare lo smart tag visualizzato come freccia accanto al controllo per aggiungere una terza riga alla tabella e utilizzare il mouse per ridimensionare le righe in modo che siano tutte e tre uguali.
Aggiungere un oggetto Label a ogni cella della tabella nella prima colonna e un oggetto TextBox a ogni cella nella seconda colonna. I controlli Label dovrebbero essere denominati, dall'alto verso il basso, firstNameLabel, lastNameLabel e emailLabel. I controlli TextBox dovrebbero essere denominati firstNameText, lastNameText e emailText. Al termine, aggiungere un controllo Button. Denominarlo okButton e modificare la proprietà Text su OK.
Aggiungere al progetto una nuova classe denominata UserInformation.
Aggiungere il qualificatore public alla definizione della classe per renderla visibile all'esterno del proprio spazio dei nomi e aggiungere le definizioni delle proprietà per FirstName, LastName e EmailAddress. Al termine, il codice dovrebbe risultare simile al seguente:
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;
}
}
};
}
- Tornare al codice per InformationForm e aggiungere una proprietà 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;
}
}
- Gestire l'evento Validated su ogni controllo TextBox in modo che sia possibile aggiornare la proprietà corrispondente in UserInformation ogni volta che uno dei valori si modifica.
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);
}
- Aggiungere i gestori per l'evento Validated a ogni controllo TextBox nel form, in modo che il nuovo valore dei controlli stessi sia assegnato a UserInformation ogni volta che l'utente li modifica.
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();
}
Per visualizzare la finestra di dialogo creata e recuperare i dati utilizzando un oggetto
Selezionare Form1 in Visual Studio. Aggiungere un oggetto Button al form e modificare le relative proprietà Name in showFormButton.
Fare doppio clic sul pulsante per aggiungere un gestore eventi che chiami la finestra di dialogo box e visualizzi i risultati.
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
Vedere anche
Attività
Procedura: creare finestre di dialogo in fase di progettazione
Procedura: chiudere finestre di dialogo e mantenere l'input dell'utente
Concetti
Input dell'utente all'interno di finestre di dialogo