C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: VB.NET OpenFileDialogにつ


(過去ログ 133 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■78694 / inTopicNo.1)  VB.NET OpenFileDialogについて
  
□投稿者/ 原 (1回)-(2016/02/09(Tue) 19:15:03)

分類:[VB.NET/VB2005 以降] 

Win7、.NET2010です。

form1にボタン1,2,3があります

ボタン1をクリックすると、form2が立ち上がります
ボタン2をクリックすると、form3が立ち上がります
ボタン3をクリックすると、form4が立ち上がります

form2にはボタン1とテキストボックス2と
テキストボックス3があります

form3にはボタン1と
テキストボックス2とテキストボックス3があります

form4にはボタン1と
テキストボックス2とテキストボックス3があります

form2のボタン1のコードは、下記になります
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Dim a As String = TextBox2.Text & "日"
If TextBox2.Text = "" Then
MessageBox.Show("エラー")
Return
End If

OpenFileDialog1.FileName = ""

OpenFileDialog1.InitialDirectory = "\\Server\folder1\folder2\folder3\folder4\" & a

OpenFileDialog1.Filter = "すべてのファイル(*.*)|*.*"

Dim btn As DialogResult = OpenFileDialog1.ShowDialog()
If btn = Windows.Forms.DialogResult.OK Then
TextBox3.Text = OpenFileDialog1.FileName
End If
End Sub

form2は上記になりますが、form3とform4のOpenFileDialog1.InitialDirectory はServerですが、
見に行くフォルダがform2とform3とform4では全て異なります

form3のボタン1をクリックしても、form2のボタン1を
クリックして開かれたフォルダが開かれます

form4のボタン1をクリックしても、form2のボタン1を
クリックして開かれたフォルダが開かれます

直前で操作したform2で見に行ったフォルダを
どうやら継承してしまうようです

継承せずに、各々のformに記述しているフォルダを
見に行くようにするには
どのようにすれば良いでしょうか?

ご教授下さい
引用返信 編集キー/
■78695 / inTopicNo.2)  Re[1]: VB.NET OpenFileDialogについて
□投稿者/ 774RR (376回)-(2016/02/10(Wed) 09:38:11)
提示コードで観測できる範囲では OpenFileDialog1 をどこで new して Dispose しているのかわからない。
1つの OpenFileDialog1 インスタンスを複数の Form で共有しているの?
毎回 new して Dispose している?
どっちだろう。

OpenFileDialog は通常、フォームのメンバにはしないんだ(1回 ShowDialog したら使い捨て)
使い回しする(共有する)設計にはなっていないはず。

前者なら、毎回 new して Dispose するよう修正 (using を使うと良い)
後者なら、うーんわからん。
プロパティ RestoreDirectory と InitialDirectory のどっちが強いか・・・だったような。

引用返信 編集キー/
■78696 / inTopicNo.3)  Re[1]: VB.NET OpenFileDialogについて
□投稿者/ ヴァン (16回)-(2016/02/10(Wed) 09:46:14)
こんにちは。

No78694 (原 さん) に返信
> OpenFileDialog1.InitialDirectory = "\\Server\folder1\folder2\folder3\folder4\" & a

全てのフォームで同じコードが書かれているとか。
実は存在しないフォルダとか。

引用返信 編集キー/
■78697 / inTopicNo.4)  Re[1]: VB.NET OpenFileDialogについて
□投稿者/ とくま (1回)-(2016/02/10(Wed) 10:00:00)
No78694 (原 さん) に返信
最後に「開く」をしたフォルダをレジストリに覚えてて、
どうもEXE毎に記録してるっぽくて、
new してもそこから読出してるっぽくて、
InitialDirectory で個別に指定しなくちゃいけないっぽいけど、
きちんと調べてないから、間違ってたら突っ込んでくださいorz
http://okwave.jp/qa/q6738744.html

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim openFileDialog1 As New OpenFileDialog()

        'openFileDialog1.InitialDirectory = "c:\"
        'openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        'openFileDialog1.FilterIndex = 2
        openFileDialog1.RestoreDirectory = True

        If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then

        End If

    End Sub

引用返信 編集キー/
■78699 / inTopicNo.5)  Re[2]: VB.NET OpenFileDialogにつ
□投稿者/ とくま (2回)-(2016/02/10(Wed) 12:09:15)
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

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -