2009-07-03 12 views
1

J'ai créé deux formulaires dans mon application Windows. Une forme agit comme une forme et l'autre forme agit comme une boîte de dialogue MODAL.Boîte de dialogue modale

La boîte de dialogue Formulaire contient un bouton et un TextBox. Lorsque ce bouton est cliqué, la boîte de dialogue MODAL DIALOGBOX doit être affichée. Cette boîte de dialogue contient également une zone de texte et deux boutons (Ok et Annuler).

Maintenant, lorsque cette boîte de dialogue est affichée, le TextBox de la boîte de dialogue doit contenir la valeur entrée dans la zone de texte de Form1.

J'ai utilisé le codage suivant pour accomplir cette tâche. Form1 Codage:

public string UserName; 
private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.ShowDialog(); 
    objFnC.txtUserName.Text = UserName; 
} 

code dans MODAL DialogBox bouton OK:

S'il vous plaît noter que le bouton Annuler est activée uniquement lorsque le bouton OK est cliqué.

codage:

private void btnOk_Click(object sender, EventArgs e) 
{ 
    btnCancel.Enabled=true; 
} 
private void btnCancel_Click(object sender,EventArgs e) 
{ 
    this.Close(); 
} 

Le problème que je suis confronté est la valeur entrée par l'utilisateur dans la zone USERNAME ne figure pas dans la zone de texte dans la MODAL BOX DIALOG. Au lieu de cela, il affiche la zone de texte comme vide.

Que faire pour obtenir les valeurs saisies par l'utilisateur dans la zone de texte de cette boîte de dialogue modale?

Quelqu'un peut-il m'aider dans l'exécution de la tâche souhaitée?

Merci d'avance !!!

Répondre

2

Change:

objFnC.ShowDialog(); 
objFnC.txtUserName.Text = UserName 

Pour:

objFnC.txtUserName.Text = UserName 
objFnC.ShowDialog(); 
6

Le problème que vous avez, c'est que vous affichez la boîte de dialogue avant de définir le nom d'utilisateur. Étant donné que le dialogue est modal, il ne passera pas à la ligne suivante tant que la boîte de dialogue n'est pas fermée. Vous voulez échanger ces lignes et tout ira bien.

//do this first 
objFnC.txtUserName.Text = UserName; 
//then show your dialog 
objFnC.ShowDialog(); 

Je tiens à souligner qu'exposer publiquement la zone de texte n'est pas une très bonne idée. Vous ne voulez pas que le consommateur ait une connaissance de la mise en œuvre de votre dialogue.

Il serait préférable d'ajouter un paramètre au constructeur de formulaire, puis de définir le texte de la zone de texte à partir de celui-ci. Ensuite, vous pouvez faire ce qui suit:

//get the username 
string userName = txtUserName.Text; 
//create a new form passing in the username 
frmFnC objFnC = new frmFnC(userName); 
//display the form 
objFnC.ShowDialog(); 

De cette façon, le consommateur ne se fie pas frmFnC ayant une zone de texte nommé txtUserName ce qui signifie que vous êtes libre de changer le fonctionnement interne de la façon dont vous affichez le nom d'utilisateur. Par exemple, vous pourriez le changer en étiquette et vous ne casseriez pas le code du consommateur! Tout ce que le consommateur a besoin de savoir, c'est qu'il doit passer un nom d'utilisateur dans le constructeur.

+0

Merci pour votre message, il travaille maintenant comme je désirais! – sheetal

1

Afin de pouvoir régler (et obtenir) le contenu de la zone de texte sous la forme modale, ajouter ce code à cette forme:

public string UserName 
{ 
    get { return txtUserName.Text; } 
    set { txtUserName.Text = value; } 
} 

Puis, dans l'autre forme, vous pouvez définir le nom d'utilisateur:

frmFnC objFnC = new frmFnC(); 
objFnC.UserName = txtUserName.Text; 
objFnC.ShowDialog(); 

Je dois aussi vous poser des questions sur la relation entre les boutons OK et Annuler dans la forme de dialogue modale; il semble un peu bizarre l'utilisateur devrait d'abord cliquer sur OK, afin d'obtenir le bouton Annuler activé, puis cliquez sur Annuler pour fermer le formulaire.

Je suggère de ne pas avoir des gestionnaires d'événements pour les événements de clic de ces boutons, mais au lieu de définir les valeurs appropriées de leur propriété DialogResult, puis définissez AcceptButton et CancelButton les propriétés du formulaire modal. De cette façon, vous pouvez vérifier la boîte de dialogue a été fermée:

frmFnC objFnC = new frmFnC(); 
objFnC.UserName = txtUserName.Text; 
if (objFnC.ShowDialog() == DialogResult.OK) 
{ 
    // the user clicked the OK button 
} 
else 
{ 
    // the user clicked the Cancel button 
} 
+0

Merci pour votre invite, il fonctionne maintenant comme je le voulais! – sheetal

1

Définissez le champ texte dans le dialogue avant d'appeler ShowDialog:

private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.txtUserName.Text = UserName; 
    objFnC.ShowDialog(); 
} 
+0

Merci beaucoup, ça marche maintenant comme je le voulais! – sheetal

1

Vous devez échanger le réglage du texte et du ShowDialog:

public string UserName; 
private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.txtUserName.Text = UserName; // SET THE DATA BEFORE SHOWING THE DIALOG 
    objFnC.ShowDialog(); 
} 

ou de forcer un redessin du dialogue par la suite.