2016/02/10(Wed) 13:28:53 編集(投稿者)
こちらの環境(VB2010,Win7)でテストした結果
インスタンスを使いまわした場合も、個別で破棄して New した場合も、
InitialDirectory で設定したフォルダが初期表示されました。
逆に InitialDirectory を設定しないと EXE 再起動しても前回のパスを
覚えているようです。EXE で1個だけしか覚えず、共有して使っちゃうみたい?
OpenFileDialog に組み込まれた仕様のようで、フォームのインスタンス
とかは関係ないと思われます。
InitialDirectory を設定しているコードを通っている限り、
>直前で操作したform2で見に行ったフォルダを
>どうやら継承してしまうようです
この現象は起きないはず。。。起きるのであれば
InitialDirectory を設定しているコードを通っていないと予想します。
(Form2 では設定していたが、Form3 では抜けていたとか。。。)
OpenFileDialog は ShowDialog だけで、Form2 を用意しても複数
開けないようなので、別のインスタンスを複数開いていて云々という
可能性も無さそうに思います。
1)InitialDirectory の設定したコードを通っているかデバッグ実行して確認
2)通っているなら初期フォルダとして表示されているか確認
[追記]2-1)ヴァンさん指摘の、指定したパスが間違っていた場合、
エラーは出ず、前回のパスが適用されてしまいますので要注意
3)サブフォルダとかを選んで閉じて、再度開いた時に InitialDirectory を
設定しないで、そのサブフォルダを開きたい(しかもフォーム毎に別のパス)と
いうのであれば、できないと思われる→フォーム毎に最後に「開く」した
フォルダを自前のコードで覚えて InitialDirectory をフォーム毎に毎回設定
してやる(私の結論)
…もしくはフォーム毎に EXE 別にしたらコード書かなくても個別に覚えて
くれるんじゃないかと予想(割に合わないというのは抜きにして)。
'///Form1
Public Class Form1
Private openFileDialog1 As New OpenFileDialog()
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
'Dim openFileDialog1 As New OpenFileDialog()
'openFileDialog1.InitialDirectory = "c:\"
'openFileDialog1.RestoreDirectory = True
If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
End If
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
'Dim openFileDialog1 As New OpenFileDialog()
'openFileDialog1.InitialDirectory = "d:\data"
'openFileDialog1.RestoreDirectory = True
If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
End If
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Form2.Show()
End Sub
End Class
'///Form2
Public Class Form2
Private openFileDialog1 As New OpenFileDialog()
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
'Dim openFileDialog1 As New OpenFileDialog()
'openFileDialog1.InitialDirectory = "d:\"
'openFileDialog1.RestoreDirectory = True
If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
End If
End Sub
End Class