2013-02-11 13 views
7

Pierwszy raz jestem wdrożenie FolderBrowserDialog w WPF i nie będę kochać to jeden bit ...DialogResult z FolderBrowserDialog w WPF

Oprócz kwestii miałem zastanawianie się, że nie odwołuje Windows.Forms w moim projekcie, teraz mam problemy starając się zobaczyć, co jest wartością zwracaną DialogResult ...

z OpenFileDialog w przeszłości robiłem to wygląda następująco:

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

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

Niestety, W tej chwili pojawiają się błędy, mówiąc coś o konwersjach z typu Dial OgResult do bool i cokolwiek masz.

Wygląda na to, że w oknie dialogowym w WPF nie widać niczego, co można zrobić, korzystając z okna dialogowego, czy ktoś może rzucić trochę światła?

Z góry dziękuję!

EDIT

Oto mój kod zmienione bez błędu konwersji typu. Nie jestem pewien, jaką wartość należy sprawdzić pod result. Zazwyczaj używałbym DialogResult.OK, z wyjątkiem tego, że nie pojawia się tutaj jako poprawna wartość.

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

"Okno dialogowe Windows Forms" nie zwraca wartości zerowej, jak w przypadku dialogów WPF, ale ['DialogResult'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult .aspx). Tylko podpowiedź. :) –

+1

Jeśli nie możesz zrozumieć błędów dotyczących konwersji między różnymi typami, powinieneś powrócić do podstaw OOP i C#, zanim spróbujesz coś zrobić w WPF, co jest złożoną strukturą nieodpowiednią dla niedoświadczonych programistów. –

+0

@HighCore, podczas gdy Twoja sugestia mogła być najbardziej trafna, to również nie ma znaczenia. Rozumiem błąd i dlatego próbowałem ustawić wynik do obiektu DialogResult, ale to nadal nie działa w instrukcji if - stąd moje pomylenie – Ortund

Odpowiedz

14

OK, więc okazuje się, że wszystkie odpowiedzi, inne odpowiedzi tutaj były słuszne.

Oni po prostu przegapiłem jedno, a myślę, że to była moja wina ...

każdym razem widziałem DialogResult w IntelliSense, gdy próbuje się go używać w moim if (jak mi powiedziano w użyciu, widziałem to:?.

bool Window.Dialog.Result
Pobiera lub ustawia dialogowe wartość wynikową, która jest wartością, która jest zwracana z metody
System.Windows.Window.ShowDialog()

Wyjątki:
System.InvalidOperationException

Ten szczególny przedmiot DialogResult nie jest jeden szukałem.

Co wreszcie pracował był następujący:

DialogResult result = fbd.ShowDialog(); 

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

Warto zauważyć, że muszę System.Windows.Forms mowa w moich usings dlatego nigdy nie myślałem, aby odwoływać się do klasy z systemem jak w powyższym fragmencie. Myślałem, że to i tak to wykorzystuje.

+0

Odkładając na bok, bardzo zalecam, aby nie robić rzeczy takich jak' cmbTemplate.SelectedItem == "Blockbusters" 'w WPF. [UI is not Data] (http://stackoverflow.com/questions/14381402/wpf-programming-methodology/14382137#14382137), dlatego nie należy traktować elementów interfejsu użytkownika jako elementów danych i definiować logikę programu na podstawie stanu te elementy. –

+0

Dobrze zauważyłem i zazwyczaj nie, ale ponieważ jestem nowy w WPF, nie znalazłem lepszego sposobu na zrobienie tego (nie, że próbowałem bardzo mocno). Chociaż tekst dla każdego elementu w comboboxie nie powinien być zmieniany w żadnym momencie podczas wykonywania, więc nie martwię się o to naprawdę – Ortund

-1

DialogResult. (OK, Anuluj cokolwiek chcesz sprawdzić),

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

Jak wziąłem z pytania: 'Zazwyczaj użyłbym DialogResult.OK, z wyjątkiem tego, że nie pojawia się tutaj jako ważna wartość." – Ortund

+0

co to jest błąd, brakuje tu jakiegokolwiek odniesienia, –

0

DialogResult jest wyliczenie i określa wartości wskazanie wartości zwracanych dialogów.

W swoim kodzie powinieneś sprawdzić, czy DialogResult.OK aktywuje zmienną za pomocą ścieżki wybranej w oknie dialogowym. DialogResult.OK jest zwracany po naciśnięciu przycisku "OK" w oknie dialogowym, w przeciwnym razie zwracana jest wartość DialogResult.Cancel.

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

Jak wziąłem z pytania: ' Zazwyczaj użyłbym DialogResult.OK, z wyjątkiem tego, że nie pojawia się tutaj jako poprawna wartość. " – Ortund