2013-02-11 19 views
7

prima volta sto implementando un FolderBrowserDialog in WPF e io non sono innamorato un po '...DialogResult con FolderBrowserDialog in WPF

A parte i problemi che avevo capire che non è stato fatto riferimento Windows.Forms nel mio progetto, ora sto avendo problemi cercando di vedere ciò che il valore di ritorno DialogResult è ...

Con un'OpenFileDialog, in passato ho fatto così:

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

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

Purtroppo, ora sto ricevendo errori con questo dicendo qualcosa sulle conversioni dal tipo Dial ogResult a bool e qualsiasi cosa tu abbia.

Non riesco a trovare nulla su come completare questo passaggio utilizzando la finestra di dialogo in WPF, qualcuno può far luce?

Grazie in anticipo!

EDIT

Ecco il mio codice e successive modifiche, senza l'errore di tipo di conversione. Non sono sicuro di quale valore controllare result contro. Normalmente userei DialogResult.OK eccetto che non appare qui come valore valido.

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

La finestra di dialogo di Windows Form non restituisce bool nullable come fanno le finestre di dialogo WPF, ma ['DialogResult'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult aspx). Solo un suggerimento. :) –

+1

Se non riesci a capire gli errori relativi alle conversioni tra diversi tipi, forse dovresti tornare alle basi di OOP e C# prima di provare a fare qualcosa in WPF, che è una struttura complessa non adatta a sviluppatori senza esperienza. –

+0

@HighCore mentre il tuo suggerimento potrebbe essere stato il più pertinente, è anche irrilevante. Capisco l'errore ed è per questo che ho provato ad impostare il risultato su un oggetto DialogResult, ma non funziona ancora nell'istruzione if - da qui la mia confusione – Ortund

risposta

14

Va bene così si scopre tutte le risposte qui altre risposte erano giuste.

Hanno appena perso fuori una cosa e penso che era colpa mia ...

Ogni volta che ho visto in DialogResult Intellisense quando si cerca di usarlo nella mia if (come mi è stato detto di usare, ho visto questo:?.

bool Window.Dialog.Result
Ottiene o imposta il valore del risultato finestra di dialogo, che è il valore che viene restituito dal metodo
System.Windows.Window.ShowDialog()

Eccezioni:
System.InvalidOperationException

Questo particolare oggetto DialogResult non è quello che stavo cercando.

Che fine ha funzionato è stato il seguente:

DialogResult result = fbd.ShowDialog(); 

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

Vale la pena notare che io ho fatto riferimento nelle mie System.Windows.Forms usings che è il motivo per cui non ho mai pensato di fare riferimento alla classe da Sistema come nel frammento di codice. Pensavo che lo stesse usando comunque.

+0

Come parte, consiglio vivamente di non fare cose come 'cmbTemplate.SelectedItem ==" Blockbusters "' in WPF. [UI is not Data] (http://stackoverflow.com/questions/14381402/wpf-programming-methodology/14382137#14382137), pertanto non è necessario trattare gli elementi dell'interfaccia utente come elementi di dati e definire la logica del programma in base allo stato di questi elementi. –

+0

Ben noto e in genere non lo faccio, ma visto che sono nuovo di WPF, non ho trovato un modo migliore di farlo (non che io abbia provato molto duramente). Anche se il testo per ogni elemento nella casella combinata non è destinato a essere modificato in qualsiasi momento durante l'esecuzione, quindi non sono troppo preoccupato per questo – Ortund

-1

DialogResult. (OK, Annulla tutto ciò che si desidera controllare),

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

Come preso dalla domanda: 'In genere utilizzerei DialogResult.OK tranne che non appare qui come valore valido. – Ortund

+0

qual è l'errore, manca qualche riferimento qui, –

0

DialogResult è un'enumerazione e definisce i valori per indicare i valori di ritorno delle finestre di dialogo.

Nel codice è necessario verificare DialogResult.OK per avviare la variabile con il percorso selezionato nella finestra di dialogo. DialogResult.OK viene restituito quando viene premuto il pulsante "OK" nella finestra di dialogo, altrimenti viene restituito DialogResult.Cancel.

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

Come preso dalla domanda:' Normalmente userei DialogResult.OK tranne che non appare qui come valore valido. – Ortund