0

ComboBox を使用してカスタマイズされた OpenFileDialog (VS2008、C#、Windows フォーム) があります。ComboBox には、ユーザーが選択できるパスのリストがあります。

私の質問は、ファイルを開くダイアログでディレクトリを変更して、コンボボックスで選択した項目のパスを指すようにする方法はありますか。

InitialDirectory は、ダイアログを開く前にのみ機能します。ダイアログを開いた後にプログラムでディレクトリを変更する方法が必要でした。

ありがとう

4

3 に答える 3

1

.NET 3.5 SP1 で Vista または Windows 7 を使用している場合は、カスタム コンボ ボックスではなく、OpenFileDialog で CustomPlaces プロパティを使用することをお勧めします。

この MSDN の記事 (WPF について) を参照してください: http://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.customplaces(v=VS.100).aspx

または、この MSDN 記事 (Windows フォーム用): http://msdn.microsoft.com/en-us/library/system.windows.forms.filedialog.customplaces(v=VS.100).aspx

Windows 2000 および XP では、場所のサイド バーをカスタマイズすることもできます。しかし、それはより難しく、いくつかの C++ コードを使用する必要があります (CLI/C++ 経由がおそらく最適です)。この手法については、MSDN の記事 http://msdn.microsoft.com/en-us/magazine/cc300434.aspxで詳しく説明されています。

OpenFileDialog に追加したコンボ ボックスを使用することに夢中になっている場合は、ダイアログに送信する Windows メッセージを知る必要があるだけです。残念ながら、どのメッセージを送信すればよいかわかりません。Common Open/Save ダイアログの厄介な内部 Win32 API の詳細については、http: //msdn.microsoft.com/en-us/library/ms646960 (VS.85).aspx を参照してください。

ウィンドウに送信するメッセージを把握できる場合、ファイル名のテキスト フィールドに、切り替えたいディレクトリを入力して、[OK] ボタンのクリックをシミュレートする方法が考えられます。これを行うと、ダイアログはそのディレクトリに切り替わります。

このウィンドウにメッセージを送信するには、おそらく、OpenFileDialog を直接使用するのではなく、ベースとなる抽象 FileDialog クラスをサブクラス化する必要があります。

于 2010-05-03T14:02:14.773 に答える
-1

openFileDialog1 の InitialDirectory プロパティを設定するだけです

private void button1_Click(object sender, System.EventArgs e)
{
    Stream myStream = null;
    OpenFileDialog openFileDialog1 = new OpenFileDialog();

    openFileDialog1.InitialDirectory = cmbPath.SelectedValue.ToString();
    openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
    openFileDialog1.FilterIndex = 2 ;
    openFileDialog1.RestoreDirectory = true ;

    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        try
        {
            if ((myStream = openFileDialog1.OpenFile()) != null)
            {
                using (myStream)
                {
                    // Insert code to read the stream here.
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
        }
    }
}
于 2010-05-03T07:41:08.747 に答える
-1

すでに述べたように、 InitialDirectory は事前に機能しますが、なぜフォルダーを後で変更するのでしょうか? FileOpenDialog はモーダル ダイアログであるため、ユーザーはダイアログ以外のアプリケーションを使用できません。フォルダを設定したくない利点と理由は何ですか? 仕事を成し遂げるために間違ったツールを使用しているようです。

于 2010-05-03T07:51:10.450 に答える