Gibt es eine Standardmethode zum Zurückgeben von Werten aus benutzerdefinierten Dialogfeldern in Windows Forms?

StackOverflow https://stackoverflow.com/questions/36984

  •  09-06-2019
  •  | 
  •  

Frage

Im Moment verfügt mein Projekt also über ein paar benutzerdefinierte Dialoge, die den Benutzer beispielsweise nach seinem Geburtstag fragen oder was auch immer.Im Moment machen sie nur Dinge wie das Setzen eines this.Birthday Eigenschaft, sobald sie eine Antwort erhalten (die vom Typ ist DateTime?, wobei die Null ein „Abbrechen“ angibt).Dann prüft der Anrufer die Birthday Eigenschaft des von ihm erstellten Dialogs, um herauszufinden, was der Benutzer geantwortet hat.

Meine Frage ist, Gibt es ein Standardmuster für solche Dinge? Ich weiß, wir können es schaffen this.DialogResult für grundlegende Dinge wie OK/Abbrechen, aber gibt es in Windows Forms eine allgemeinere Möglichkeit, in einem Formular anzugeben: „Hier sind die Daten, die ich gesammelt habe“?

War es hilfreich?

Lösung

Ich würde sagen, dass das Offenlegen von Eigenschaften in Ihrem benutzerdefinierten Dialogfeld der idiomatische Weg ist, da dies bei Standarddialogen (wie Select/OpenFileDialog) der Fall ist.Jemand könnte argumentieren, dass es expliziter und aufschlussreicher ist, eine ShowBirthdayDialog()-Methode zu haben, die das gesuchte Ergebnis zurückgibt, aber dem Muster des Frameworks zu folgen ist wahrscheinlich der kluge Weg.

Andere Tipps

Gibt es ein Standardmuster für solche Dinge?

Nein, es hört sich so an, als ob Sie den richtigen Ansatz verfolgen.

Wenn das Dialogfeld DialogResult.OK zurückgibt, gehen Sie davon aus, dass alle erforderlichen Eigenschaften im Dialogfeld gültig sind.

Für mich ist es der richtige Weg, beim Dialog zu bleiben, der die Standarddialogantworten zurückgibt, und dann über Eigenschaften auf die Ergebnisse zuzugreifen.

Zwei gute Gründe aus meiner Sicht:

  1. Konsistenz – Sie machen bei einem Dialog immer das Gleiche und die Art der Frage legt nahe, dass Muster gut sind (-:Allerdings stellt sich auch die Frage: Ist das ein gutes Muster?
  2. Es ermöglicht die Rückgabe mehrerer Werte aus dem Dialog – ok, auch hier gibt es eine völlig neue Diskussion, aber angewandter Pragmatismus bedeutet, dass dies das ist, was man möchte. Unter bestimmten Umständen ist es nicht immer angemessen oder wünschenswert, Werte zu verpacken, nur damit man sie wieder übergeben kann alles auf einmal.

Der Logikfluss ist auch schön:

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

Das ist eine gute Frage – wir sollten solche Dinge hinterfragen –, aber für mich ist das aktuelle Muster anständig.

Murph

Bei modalen Eingabedialogen überlade ich normalerweise ShowDialog und gebe Parameter für die Daten aus, die ich benötige.

DialogResult ShowDialog(out datetime birthday)

Ich finde im Allgemeinen, dass es einfacher ist, meine Eigenschaften zu entdecken und zu verstehen, als meine Eigenschaften mit den über 100 zu mischen, die die Form-Klasse bereitstellt.

Für Formulare habe ich normalerweise einen Controller und eine IView-Schnittstelle, die schreibgeschützte Eigenschaften zum Übergeben von Daten verwendet.

Ich habe es immer genau so gemacht, wie du es beschreibst.Ich bin gespannt, ob es einen akzeptierteren Ansatz gibt.

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