2013-02-11 5 views
7

erstes Mal, dass ich einen Folder in WPF bin Implementierung und ich liebe es nicht ein bisschen ...Dialogresult mit Folder in WPF

Abgesehen von den Fragen, die ich heraus hatte herauszufinden, dass Windows.Forms nicht referenziert wurde in meinem Projekt, jetzt bin ich Probleme versuchen der Dialogrückgabewert zu sehen, was ... Mit einem Openfiledialog, ich habe es in der Vergangenheit getan thusly

ist:

OpenFileDialog ofd = new OpenFileDialog(); 
Nullable<bool> result = ofd.ShowDialog(); 

if (result == true) 
{ 
    // all went well, carry on and do your thing here 
} 

Leider habe ich bekomme jetzt Fehler damit etwas über Konvertierungen vom Typ Dial zu sagen OgResult zu boolen und was auch immer du hast.

Es scheint nichts zu finden, wie Sie diesen Schritt in der Verwendung des Dialogfelds in WPF ausführen können, kann jemand etwas Licht abwerfen?

Vielen Dank im Voraus!

EDIT

Hier ist mein Code wie ohne den Typ Konvertierungsfehler geändert. Ich bin mir nicht sicher, welchen Wert man gegen result prüfen sollte. Normalerweise würde ich DialogResult.OK verwenden, außer dass hier kein gültiger Wert angezeigt wird.

private void btnBrowse_Click(object sender, RoutedEventArgs e) 
    { 
     if (cmbTemplate.SelectedItem == "Blockbusters") 
     { 
      FolderBrowserDialog fbd = new FolderBrowserDialog(); 

      DialogResult result = fbd.ShowDialog(); 

      // 
      // ERROR: 'System.Nullable<bool>' does not contain a definition for 'OK' 
      // and no extention method 'OK' accepting a first argument of type 
      // 'System.Nullable<bool>' could be found. 
      // 
      if (result == DialogResult.OK) 
      { 
       txtSource.Text = fbd.SelectedPath; 
      } 
     } 
    } 
+2

Die Windows Forms 'Dialog' gibt keine Nullable Bool wie die WPF-Dialoge, aber [' DialogResult'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult .aspx). Nur ein Hinweis. :) –

+1

Wenn Sie die Fehler bei Konvertierungen zwischen verschiedenen Typen nicht verstehen, sollten Sie vielleicht zu den Grundlagen von OOP und C# zurückkehren, bevor Sie etwas in WPF tun, einem komplexen Framework, das für unerfahrene Entwickler nicht geeignet ist. –

+0

@HighCore, während Ihr Vorschlag der relevanteste gewesen sein könnte, ist es auch irrelevant. Ich verstehe den Fehler und deshalb habe ich versucht, Ergebnis zu einem DialogResult-Objekt, aber das funktioniert immer noch nicht in der if-Anweisung - daher meine Verwirrung – Ortund

Antwort

14

Okay, so stellt sich heraus, alle Antworten andere Antworten hier waren richtig.

Sie eine Sache gerade verpaßt, und ich denke, dass meine Schuld ...

I DialogResult in Intellisense sah Jedes Mal war bei dem Versuch, es in meiner if-Anweisung zu verwenden (wie mir zu verwenden gesagt hat, ich sah dies:.

Bool Window.Dialog.Result
Ruft den Dialog Ergebniswert, das ist der Wert, der von dem
System.Windows.Window.ShowDialog() -Methode zurückgegeben wird

Ausnahmen:
System.InvalidOperationException

Dieses besondere Dialogresult Objekt ist nicht das, was ich suchte.

Was war schließlich arbeitete die folgende:

DialogResult result = fbd.ShowDialog(); 

if (result == System.Windows.Forms.DialogResult.OK) 
{ 
    // do work here 
} 

Es ist erwähnenswert, dass ich System.Windows.Forms in meinem usings verwiesen habe, weshalb ich die Klasse aus dem System wie in dem obigen Schnipsel nie gedacht, zu verweisen. Ich dachte, dass es das sowieso benutzt.

+0

Als Nebensächlichkeit empfehle ich, Dinge wie 'cmbTemplate.SelectedItem ==" Blockbusters "' in WPF zu tun. [UI ist keine Daten] (http://stackoverflow.com/questions/14381402/wpf-programming-methodology/14382137#14382137), daher sollten Sie keine UI-Elemente als Datenelemente behandeln und Ihre Programmlogik basierend auf dem Status von definieren diese Elemente. –

+0

Gut gemerkt und normalerweise nicht, aber da ich neu bei WPF bin, habe ich keinen besseren Weg gefunden, es zu tun (nicht dass ich es sehr versucht hätte). Obwohl der Text für jedes Element in der Combobox nicht zu irgendeinem Zeitpunkt während der Ausführung geändert werden soll, mache ich mir deswegen keine großen Sorgen – Ortund

-1

Dialogresult. (OK, Abbrechen, was Sie überprüfen möchten),

if (result == DialogResult.OK) // DialogResult.(Your desired result, select from the list it generates) 
{ 
    txtSource.Text = fbd.SelectedPath; 
} 
+0

Wie aus der Frage: 'Normalerweise würde ich DialogResult.OK verwenden, außer das hier nicht als ein gültiger Wert angezeigt wird. – Ortund

+0

Was ist der Fehler, fehlt hier eine Referenz, –

0

DialogResult ist eine Aufzählung und definiert Werte die Rückgabewerte von Dialogen anzuzeigen.

In Ihrem Code sollten Sie nach DialogResult.OK suchen, um Ihre Variable mit dem im Dialog gewählten Pfad zu initialisieren. DialogResult.OK wird zurückgegeben, wenn im Dialog die Schaltfläche "OK" gedrückt wird, andernfalls wird DialogResult.Cancel zurückgegeben.

if (result == DialogResult.OK){ 
    txtSource.Text = fbd.SelectedPath; 
} 
+0

Wie aus der Frage:' Normalerweise würde ich DialogResult.OK verwenden, außer dass hier nicht als gültiger Wert angezeigt wird. – Ortund