2013-02-11 2 views
7

Первый раз я реализует FolderBrowserDialog в WPF, и я не люблю это один бит ...DialogResult с FolderBrowserDialog в WPF

Помимо вопросов, я выясняя, что Windows.Forms не ссылочных в моем проекте, теперь у меня возникают проблемы, пытаясь увидеть, что возвращение DialogResult значение ...

с OpenFileDialog, в прошлом я делал это таким образом:

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

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

к сожалению, я Теперь я получаю ошибки с этим высказыванием что-то о конверсиях из типа Dial ogResult to bool и все, что у вас есть.

Может показаться, что не нашли ничего о том, как завершить этот шаг в использовании диалога в WPF, может ли кто-нибудь пролить свет?

Заранее благодарен!

EDIT

Вот мой код с поправками без ошибок преобразования типа. Я не уверен, какую ценность нужно проверить result против. Обычно я использую DialogResult.OK, за исключением того, что здесь не отображается допустимое значение.

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

Диалоговое окно Windows Forms 'Dialog' не возвращает nullable bool, как это делают диалоговые окна WPF, но [' DialogResult'] (http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult .aspx). Просто намек. :) –

+1

Если вы не можете понять ошибки в конверсиях между разными типами, возможно, вам стоит вернуться к основам ООП и C#, прежде чем пытаться что-то сделать в WPF, что является сложной структурой, не подходящей для неопытных разработчиков. –

+0

@HighCore, хотя ваше предложение, возможно, было самым подходящим, оно также не имеет значения. Я понимаю ошибку, и поэтому я попытался установить результат на объект DialogResult, но это все еще не работает в инструкции if, поэтому моя путаница – Ortund

ответ

14

Хорошо, так что получается, что все ответы другие ответы здесь были правильными.

Они просто пропустили одну вещь, и я думаю, что это была моя вина ...

Каждый раз, когда я видел DialogResult в Intellisense при попытке использовать его в своем заявлении, если (как мне сказали, чтобы использовать, Я видел это:?.

BOOL Window.Dialog.Result
Получает или задает диалоговое результирующее значение, которое является значением, которое возвращается из метода
System.Windows.Window.ShowDialog()

Исключения:
System.InvalidOperationException

Этот конкретный объект DialogResult не один я искал.

Что, наконец, работал было следующее:

DialogResult result = fbd.ShowDialog(); 

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

Стоит отметить, что у меня есть System.Windows.Forms ссылки в моих usings, поэтому я никогда не думал, чтобы ссылаться на класс из системы, как в приведенном выше фрагменте кода. Я думал, что это все равно.

+0

В стороне, я настоятельно рекомендую не делать такие вещи, как 'cmbTemplate.SelectedItem ==" Blockbusters "' в WPF. [UI is not Data] (http://stackoverflow.com/questions/14381402/wpf-programming-methodology/14382137#14382137), поэтому вы не должны рассматривать элементы пользовательского интерфейса как элементы данных и определять свою программную логику на основе состояния эти элементы. –

+0

Хорошо отметил, и обычно я этого не делаю, но поскольку я новичок в WPF, я не нашел лучшего способа сделать это (не то, что я очень старался). Хотя текст для каждого элемента в combobox не должен изменяться в любой момент во время выполнения, поэтому я не слишком беспокоюсь об этом – Ortund

-1

DialogResult. (КИ, Отмена, что вы хотите, чтобы проверить),

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

Как взято из вопроса: 'Обычно я использую DialogResult.OK, за исключением того, что здесь не отображается как допустимое значение. ' – Ortund

+0

Какая ошибка, вы не указали какую-либо ссылку здесь, –

0

DialogResult представляет собой перечисление и определяет значения для указания возвращаемых значений диалогов.

В вашем коде вы должны проверить на DialogResult.OK, чтобы инициализировать вашу переменную с помощью пути, выбранного в диалоговом окне. DialogResult.OK возвращается, когда в диалоговом окне нажата кнопка «ОК», иначе возвращается DialogResult.Cancel.

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

Как взято из вопроса:' Обычно я использую DialogResult.OK, за исключением того, что здесь не отображается допустимое значение. – Ortund

Смежные вопросы