- PR -

C#でOpenFileDialogを複数箇所で使用するときInitialDirectoryは?

投稿者投稿内容
胴狸
会議室デビュー日: 2006/01/20
投稿数: 8
投稿日時: 2006-01-20 00:53
初めまして、C#初心者です。

OpenFileDialogを複数箇所で異なるディレクトリから開きたいのですがうまくいきません。
最初に表示されたopenFileDialogのInitialDirectoryプロパティがずっといきています。
Dialog中でディレクトリを移動した場合、次のダイアログを開くときはその場所から始まります。
InitialDirectoryプロパティ指定を生かす方法をお教えいただきたく、
よろしくお願いいたします。
(大分略していますが下記のようなコーディングをしています)

private void button1_Click(object sender, System.EventArgs e)
{
DialogResult ret;
openFileDialog1.InitialDirectory = @"c:\";
openFileDialog1.RestoreDirectory = true;
openFileDialog1.Filter="*.txt";
ret = openFileDialog1.ShowDialog();
}
private void button2_Click(object sender, System.EventArgs e)
{
DialogResult ret;
openFileDialog2.InitialDirectory = @"c:\";
openFileDialog2.RestoreDirectory = true;
openFileDialog2.Filter="*.txt";
ret = openFileDialog2.ShowDialog();
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-20 01:01
引用:

胴狸さんの書き込み (2006-01-20 00:53) より:

OpenFileDialogを複数箇所で異なるディレクトリから開きたいのですがうまくいきません。


InitialDirectory をその都度合うように設定してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2006-01-20 01:30
南部です。

コード:
       private void button1_Click(object sender, System.EventArgs e)
        {
            DialogResult ret;
            //初期化時に一度だけ設定する
            //openFileDialog1.InitialDirectory = @"c:";
            //これは、選択したファイルを覚えておかない(元に戻す)設定なので削除
            //openFileDialog1.RestoreDirectory = true;
            openFileDialog1.Filter="*.txt";
            ret = openFileDialog1.ShowDialog();
        }

//ボタン2も同様


InitialDirectoryプロパティ指定を生かす方法ってこういうことではないのかな?
胴狸
会議室デビュー日: 2006/01/20
投稿数: 8
投稿日時: 2006-01-21 02:38
じゃんぬねっと様、南部さま、ありがとうございます。
相対パスの扱いに誤りがあるようですので調べてみます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-21 10:32
そういうことだったのね。
RestoreDirectory がわざわざ設定されているからわけがわからなかった。

引用:

胴狸さんの書き込み (2006-01-21 02:38) より:

相対パスの扱いに誤りがあるようですので調べてみます。


相対パス? 通常、パスは CurrentDirectry からの開始になりますよね。
扱いに誤りがあるというのはどういうことでしょう?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
胴狸
会議室デビュー日: 2006/01/20
投稿数: 8
投稿日時: 2006-01-23 14:19
大変恥ずかしい原因がわかり、自己解決しました。

複数ファイルにInitialDirectoryを保存しているファイルを参照するのに古いものを読んでおりました。
存在しないディレクトリのため、最初の実在する設定がずっと使われていたのでした。

お手数おかけして申し訳ありません。ありがとうございました。
胴狸
会議室デビュー日: 2006/01/20
投稿数: 8
投稿日時: 2006-02-21 21:21
基本的な部分で解決できていませんでした。
質問のしかたをかえまして、再度お願いいたします。


ボタン押下時に、OpenFileDialogを使い特定ディレクトリのファイルを選択し、テキストボックス、またはラベルに表示しようとしております。
特定ディレクトリ(A)をInitialDirectoryで指定しています。
実行時にOpenFileDialogでディレクトリを(B)に移動しファイルを選択すると、
次回にOpenFileDialogを呼び出したときには表示は(B)からになってしまいます。

ボタン押下の都度、固定(A)ディレクトリからOpenFileDialogを表示するにはどうしたらよいでしょうか。
現在の動作は下記のソースによります。

static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
DialogResult ret1;

openFileDialog1.InitialDirectory = @"C:\\";
openFileDialog1.CheckFileExists = true;
openFileDialog1.RestoreDirectory = true;
openFileDialog1.Filter= "すべてのファイル(*.*)|*.*|"+ "テキストファイル(*.csv)|*.csv";
openFileDialog1.FilterIndex = 2;

ret1 = openFileDialog1.ShowDialog();

if(ret1 == DialogResult.OK)
label2.Text = System.IO.Path.GetFileName(openFileDialog1.FileName);
else
label2.Text = "";
openFileDialog1.Dispose();
}

private void Form1_Load(object sender, System.EventArgs e)
{
}
    }
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-22 09:58
その前に、ご提示されたソースではコンパイル通らないと思うんですが...
また Dispose している割に再インスタンス化していませんよね。

ですので、現状の悩んでいる状況と結びつきません。

コード:

    private void button1_Click(object sender, System.EventArgs e) {
        using (OpenFileDialog openFileDlg = new OpenFileDialog()) {
            openFileDlg.InitialDirectory = @"C:\"; 
            openFileDlg.RestoreDirectory = true; 

            if (openFileDlg.ShowDialog() == DialogResult.OK) {
                this.label1.Text = System.IO.Path.GetFileName(openFileDlg.FileName);
            } else {
                this.label1.Text = "";
            }
        }
    }


とりあえず、こんな感じで問題ないと思いますが、如何でしょうか?
もちろん、複数箇所あるならば複数箇所で同じような実装になるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)