2009-07-03 8 views
1

Ich habe zwei Formulare in meiner Windows-Anwendung erstellt.Modal Dialogfeld

Ein Formular dient als Formular und das andere Formular fungiert als MODAL DIALOG BOX.

Das Formular-Dialogfeld enthält eine Schaltfläche und eine TextBox. Wenn diese Schaltfläche angeklickt wird, sollte die MODAL DIALOGBOX angezeigt werden. Dieses Dialogfeld enthält auch ein Textfeld und zwei Schaltflächen (Ok und Abbrechen).

Jetzt, wenn dieses Dialogfeld angezeigt wird, sollte die TextBox des Dialogfelds den Wert enthalten, der in das Textfeld von Form1 eingegeben wird.

Ich habe die folgende Codierung verwendet, um diese Aufgabe zu erfüllen. Form1 Codierung:

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 in Modal DialogBox OK-Taste:

Bitte beachten Sie, dass die Schaltfläche nur aktiviert, Abbrechen, wenn die Schaltfläche OK geklickt wird.

Codierung:

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

Das Problem, das ich bin vor ist der Wert durch den Benutzer in der NUTZERNAME Textbox eingegeben wird nicht in der Textbox im modalen Dialogfeld angezeigt. Stattdessen wird das Textfeld leer angezeigt.

Was kann ich tun, um die vom Benutzer in das Textfeld eingegebenen Werte in dieses modale Dialogfeld einzugeben?

Kann mir jemand bei der Ausführung der gewünschten Aufgabe helfen?

Vielen Dank im Voraus !!!

Antwort

2

Wechsel:

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

An:

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

Das Problem, das Sie haben, ist, dass Sie das Dialogfeld anzeigen, bevor Sie den Benutzernamen festlegen.

Da der Dialog modal ist, wird nicht in die nächste Zeile gesprungen, bis der Dialog geschlossen wird. Du willst diese Linien tauschen und es wird gut gehen.

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

Ich möchte darauf hinweisen, dass das öffentliche Aussetzen der Textbox keine wirklich gute Idee ist. Sie möchten nicht, dass der Verbraucher Implementierungswissen über Ihren Dialog hat.

Es wäre besser, wenn Sie dem Formularkonstruktor einen Parameter hinzufügen und dann den Textfeldtext innerhalb dieses Formulars festlegen würden. Dann könnten Sie wie folgt vorgehen:

//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(); 

Auf diese Weise wird der Verbraucher unter Berufung auf nicht frmFnC ein Textfeld mit dem Namen txtUserName was bedeutet, du bist frei, um die inneren Abläufe zu ändern, wie Sie den Benutzernamen angezeigt werden soll. Zum Beispiel könnten Sie es in ein Etikett ändern und Sie würden den Code des Verbrauchers nicht brechen! Der Kunde muss nur wissen, dass er einen Benutzernamen in den Konstruktor eingeben muss.

+0

Vielen Dank für Ihre prompte es jetzt funktioniert, wie ich gewünscht! – sheetal

1

Um einstellen zu können (und erhalten) der Inhalt des Textfelds in dem modalen Formular, fügen Sie diesen Code in dieser Form:

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

Dann in der anderen Form, können Sie einstellen, der Benutzername:

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

ich brauche auch Sie über die Beziehung zwischen den Schaltflächen OK und Abbrechen im modalen Dialogform zu stellen; Es scheint ein wenig seltsam, dass der Benutzer zuerst auf OK klicken muss, um die Schaltfläche Abbrechen zu aktivieren, und dann auf Abbrechen, um das Formular tatsächlich zu schließen.

würde ich vorschlagen, keine Event-Handler für die Click-Ereignisse dieser Schaltflächen müssen, sondern die entsprechenden Werte ihrer DialogResult Eigenschaft festgelegt, und legen Sie dann die AcceptButton und CancelButton Eigenschaften modale Form. Auf diese Weise können Sie überprüfen, wie der Dialog geschlossen wurde:

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

Danke für Ihre prompt es funktioniert jetzt wie ich es wollte! – sheetal

1

das Textfeld im Dialog ein, bevor ShowDialog Aufruf:

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

Vielen Dank es funktioniert jetzt wie ich es wollte! – sheetal

1

Sie müssen die Einstellung des Textes und der Showdialog tauschen:

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(); 
} 

oder erzwingen Sie danach ein Neuzeichnen des Dialogs.

Verwandte Themen