
vb.netのOpenFileDialogでダイアログを開いたとき、最初はマイドキュメントが表示されますが
違うフォルダからファイルを選ぶと、次にダイアログを開いたときはそのフォルダ(カレントフォルダ?)がまず表示されます。
その情報はどこに保存されてるのですか?
同じパソコンでプログラムをコピーして交互に動かしてもカレントフォルダはその度に変わってるようです。
別のパソコンにプログラムをコピーしたら(最初だけは)マイドキュメントからになるんですか?
もう1つ質問で
RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですが
なぜでしょう?
試しに作ったコードは↓です。
環境はvb2005、XP-sp3です。
--------------------
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
Dim OpenFileDialog1 As New OpenFileDialog()
' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False)
OpenFileDialog1.RestoreDirectory = False
' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
MessageBox.Show(OpenFileDialog1.FileName)
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
Dim OpenFileDialog2 As New OpenFileDialog()
' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False)
OpenFileDialog2.RestoreDirectory = True
' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する
If OpenFileDialog2.ShowDialog() = DialogResult.OK Then
MessageBox.Show(OpenFileDialog2.FileName)
End If
End Sub
End Class
--------------------
No.1ベストアンサー
- 回答日時:
Google先生によると、Q5748915で一回会ってるみたいね。
さて、本題。
当方Windows XP上で検証。
i)
MS謹製の.NET Frameworkでは、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU
とかに書きこまれている模様。
#確認できる環境はなく確実ではないが、以下のサイトのものとキーが違うんだよなー。Vistaだからかなあ?
http://www.winhelponline.com/articles/195/1/How- …
もし、ここであっているなら、そのアプリケーションを別マシンに持っていったらそのマシンのユーザー用のレジストリを参照するから、当然それぞれ別のディレクトリが参照される。
ii)
>RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですがなぜでしょう?
たしかに名前はそんな機能に見える。魔法の言葉「RTFM」を唱えてみよう。
==================
http://msdn.microsoft.com/en-us/library/system.w …
>Important
重要
>If the user of your application changes the folder in the FileDialog, then the current working directory for your application is set to the location specified in the FileDialog. To prevent this, set the RestoreDirectory property to true.
あなたのアプリケーションのユーザが、(OpenFileDialog等の継承元の)FileDialogのフォルダを変更した場合、あなたのアプリケーションのカレントワーキングディレクトリが、FileDialogで指定した場所に変更される。これを防ぐためにはRestoreDirectoryをtrueに設定してください。
==============================================
…何でそんな設計なんだよ(怒) > MS
で、このカレントワーキングディレクトリはOpenFileDialogが次回開く場所とは関係がない。それはおそらく、InitialDirectoryプロパティだろう。
空文字列が入っていた場合の挙動は知らない(汗)。MonoDevelop上では、EXEファイルのある位置になったし。以下のコードを試してみるといい。
using System;
using System.Windows.Forms;
class X{
public static void Main(){
OpenFileDialog ofd1 = new OpenFileDialog();
//ofd1.RestoreDirectory = true;
System.Console.WriteLine(System.Environment.CurrentDirectory);
ofd1.ShowDialog();
System.Console.WriteLine(System.Environment.CurrentDirectory);
ofd1.ShowDialog();
System.Console.WriteLine(System.Environment.CurrentDirectory);
}
}
ただ、Windows 7では設定してもディレクトリが変わらないだの
Bug! This class produces different results depending on the OS(下部、Eiver氏のコメント)
http://msdn.microsoft.com/en-us/library/system.w …
FileDialog.AutoUpgradeEnabledがtrueだと、効果がなくなるだのという話もある。
http://social.msdn.microsoft.com/forums/en-US/wi …
NyaRuRu氏は.NET Frameworkのソースコードを読む手を提案している。
#一応、Monoは、読みながら書くなよ、と言っているので(ライセンスとか権利関係がややこしくなるし)一応俺はソースを読んでない。
#まぁ正直俺は鳥頭なので、読んでも、どうせすぐ忘れて同じコードなんかかけないと思っていますが。
文字数が足りないので、Monoの動きに関する解説は別のところに置いておく。
難度は高くないが、役に立たない割に長くて面倒くさい内容だ。練習にはなるけどね
https://cid-b89cb784f5346675.office.live.com/sel …
またありがとうございます^o^
残りの解説はさっきダウンロードしてきましたが
このページの本文もこれから読んでいきます。
とりあえずは
・ユーザ毎のレジストリに保存されている
・同じユーザーであれば最後に開いた場所を覚えている
・違うマシン、違うユーザなら再びマイドキュメントから
ということですね
軽い気持ちで質問したのですが
プログラムのほうは思った以上に複雑みたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
このQ&Aを見た人はこんなQ&Aも見ています
-
OpenFileDialogを使った後にもう一度開くと以前のファイルを表示させたい。
Visual Basic(VBA)
-
VB.NRT FolderBrowserDialogを使用して、選択したフォルダ内のファイルを表示させるには?
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
-
5
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
6
VB2005 コードでのコントロールのコピーについて
Visual Basic(VBA)
-
7
CloseとDisposeの違い
Visual Basic(VBA)
-
8
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
-
9
vb.netです。2次元配列の要素をFor Eachでひとつづつ取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
C言語を用いたファイルの一括削...
-
[VC]VCのデバッグ実行で落ちる...
-
FTPでputすると空ファイルが出...
-
コンパイラについて
-
Excelマクロからのバイナリデー...
-
webアプリケーションでの画像フ...
-
フルパスから最後のディレクト...
-
絶対パスの絶対て英語で何でし...
-
「UNCパスはサポートされません...
-
ExcelVBAでカレントディレクト...
-
セルに入力されたパスでフォル...
-
マイクラでPythonのプログラミ...
-
エクセルVBAで相対パスでファイ...
-
fopenで別ディレクトリにファイ...
-
C言語初心者の質問失礼します。
-
バッファとは何ですか
-
Thunderbirdでemlファイルを開...
-
Access クエリ実行が急に非常に...
-
コンパイルするときに、ファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
「UNCパスはサポートされません...
-
FTPでputすると空ファイルが出...
-
絶対パスの絶対て英語で何でし...
-
fopenで別ディレクトリにファイ...
-
ExcelVBAでカレントディレクト...
-
ファイルやディレクトリの存在...
-
windows.hがincludeされない
-
セルに入力されたパスでフォル...
-
ネットワーク上のコンピュータ...
-
Ubuntu テキストファイルをどこ...
-
C言語を用いたファイルの一括削...
-
webアプリケーションでの画像フ...
-
新規作成ファイルパスが有効か...
-
ファイルダイアログのカレント...
-
ExcelVBA サーバーの(共有フォ...
-
GetPrivateProfileStringでini...
-
エクセルVBAで相対パスでファイ...
-
マイクラでPythonのプログラミ...
おすすめ情報