Frage

Ich bin irgendwie mit diesem stecken, so hoffte ich mir jemand helfen könnte.

Ich mache ein WinForms-Anwendung und ich brauche ein Modal Dialog (form.ShowDialog) zu zeigen, die einen Wert zurückgibt (fordert den Benutzer auf einige Werte und hüllt sie in ein Objekt).

Ich kann einfach nicht sehen, wie dies zu tun, anstatt einem Verweis in das Objekt geben oder in Abhängigkeit von irgendeiner Form von öffentlichem Eigentum danach die Daten zu lesen.

Ich möchte nur etwas anderes haben Showdialog zurückkehren, aber das funktioniert nicht. Ist thare einig „guter“ Weg, dies zu tun?

Ich bin sicher, dass das Problem nicht neu ist, aber da fast niemand scheint mehr zu tun WinForms kann ich keine Anleitung im Web finden.

War es hilfreich?

Lösung

Fügen Sie eine statische Methode, um Ihre Form, wie folgt aus:

public class MyDialog : Form
{
    // todo: think of a better method name :)
    public static MyObject ShowAndReturnObject() 
    {
        var dlg = new MyDialog();
        if (new dlg.ShowDialog() == DialogResult.OK) 
        {
            var obj = // construct an instance of MyObject from dlg
            return obj;
        }
        else
        {
           return null; 
        }
    }
}

Jetzt können Sie diese von Ihrem Programm aufrufen thusly:

var myObject = MyDialog.ShowAndReturnObject();

... und wenn sie den Dialog abbrechen, wird myObject null sein.

Nun, gesagt hat, alles, was, glaube ich, dass eine Eigenschaft zu dem Formular der Klasse hinzugefügt, die Sie dann aus nach dem Aufruf von Showdialog lesen () ist der bessere Ansatz.

Andere Tipps

Sie können eine öffentliche Eigenschaft innerhalb des Dialog erstellen, die die Rückkehr Wert darstellt:

/* Caller Code */   
var dlg = new MyDialog();
if(dlg.ShowDialog() == DialogResult.OK)
  MessageBox.Show(dlg.MyResult);

/* Dialog Code */
public string MyResult { get { return textBox1.Text; } }

private void btnOk_Click(object sender, EventArgs e)
{
  DialogResult = System.Windows.Forms.DialogResult.OK;
  this.Close();
}

Sie können auch eine neue Methode Showdialog in Ihrer Formularklasse erstellen, die im Grunde tut, was Matt Hamilton tut. Vielleicht sogar eine Erweiterung Methode, wenn es etwas, das Sie in Ihrem Problem zu vielen Formulare tun.

Das öffentliche Eigentum im Dialogform macht Sinn. Allerdings schließen Sie den Dialog in dem OK-Button Click-Ereignishandler. Wenn Sie den Dialog Eigenschaft die Dialogform zuweisen wird ausgeblendet. Dann in dem anrufenden Formular können Sie, wenn Ok bestimmen oder geklickt wurde Abbrechen durch den Dialog untersuchen. Dann können Sie die öffentliche Eigenschaft zugreifen, wenn die Schaltfläche OK geklickt wurde und dann das Dialogform entsorgen. Dies sollte eine Try-Catch-finally in der anrufenden Form blockieren oder durch eine Anweisung using getan werden. Sie müssen von dem modalen Dialog verfügen, um einen Speicherverlust zu verhindern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top