9

初めてWPFにFolderBrowserDialogを実装しましたが、少し好きではありません...

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
}

残念ながら、DialogResult型からboolへの変換、およびあなたが持っているものについて何かを言っているというエラーが発生しています。

WPFでダイアログを使用してこの手順を完了する方法について何も見つからないようですが、誰かが光を当てることができますか?

前もって感謝します!

編集

これが型変換エラーなしで修正された私のコードです。どの値をチェックするかわかりませんresultDialogResult.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;
            }
        }
    }
4

4 に答える 4

17

さて、ここでの他の答えはすべて正しかったことがわかりました。

彼らはただ一つのことを逃しました、そしてそれは私のせいだと思います...

DialogResultIntellisenseでifステートメントで使用しようとするたびに(使用するように言われているように、次のように表示されます)。

ブール?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ます。そのため、上記のスニペットのようにSystemからクラスを参照することを考えたことはありませんでした。とにかくこれを使っていると思いました。

于 2013-02-12T07:22:56.217 に答える
0

DialogResultは列挙型であり、ダイアログの戻り値を示す値を定義します。

コードDialogResult.OKでは、ダイアログで選択したパスを使用して変数を初期化するかどうかを確認する必要があります。DialogResult.OKダイアログで「OK」ボタンが押されたときに返されます。それ以外の場合はDialogResult.Cancel返されます。

if (result == DialogResult.OK){
  txtSource.Text = fbd.SelectedPath;
}
于 2013-02-12T06:58:32.603 に答える
0

ここで遅い答えですが、なぜだけではありません。。

private void SelectFolder()
{
    var dialog = new FolderBrowserDialog();
    var status = dialog.ShowDialog(); // ShowDialog() returns bool? (Nullable bool)
    if (status.Equals(true))
    {
        SelectedFolderPath = dialog.SelectedPath;
    }
}

結果はデバッグセッションで確認できます。[キャンセル]ボタンをクリックするとfalseを返します。

于 2018-07-14T10:24:02.090 に答える
-1

DialogResult。(OK、チェックしたいものはすべてキャンセルしてください)、

if (result == DialogResult.OK) // DialogResult.(Your desired result, select from the list it generates)
{
    txtSource.Text = fbd.SelectedPath;
}
于 2013-02-12T06:51:00.430 に答える