VBでドライブ,ディレクトリ,ファイルのリストボックスを作成してます。
ドライブリストボックスでCDドライブ等で媒体が入っていない時は当たり前
なんですがエラーが表示されるようにしてます。
ここで質問なんですがドライブ選択でエラーが出たとき以前選択してた
状態に戻したいのです。
現在ドライブだけは以前の状態に戻るんだけどディレクトリ,ファイルを選択
してた場合もその状態に戻したいのです。
VBと関係なくてプログラム的な事になってしまいますがお願いします。
追加
上の質問とちょっと異なるのですが,ドライブを変更して
またドライブを元に戻したときに以前の選択状態で表示したい場合
はどうしたらいいでしょうか。
(例)
C:\test\ ⇒ C:\Documents and Settings ⇒(Dドライブを選択)D:\
⇒(Cドライブを選択)C:\test\
となってしまいます。これをDからCに変更した時に
C:\Documents and Settings の状態にしたい。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200502/05020004.txt
↑基本的な操作は理解できてると仮定して…
>ドライブ,ディレクトリ,ファイルのリストボックス
ってのが DriveListBox コントロール, DirListBox コントロール,
FileListBox コントロールだとして、それぞれ独立したコントロール
ですから一緒にして質問されても回答に困ります。
DriveListBox コントロールを変更したら自動で他のコントロール
の値が変わる処理は標準では装備されて無いはずです。プログラマが
コードでそれぞれのコントロールのプロパティを変更してるのでは?
だとすると、元に戻す処理もコードで書かないと無理でしょう?。
それぞれのコントロールで、以前の選択項目を覚える機能は無いと
思います。DriveListBox コントロールで以前の状態に戻るのは、
移動先がエラーで選択できないので、移動自体が実行されて無い
だけでは?選択されている項目が変更される毎に自分で用意した変数
に覚えておいて、エラーが出たタイミングで覚えている場所に
移動すれば良いんじゃないですか?。…というか移動する処理を
実行しなければいいような気がしますが?
2番目の質問についても、全てのドライブについて選択されている
項目を覚えていくしかないと思います。
特攻隊長まるるうさん、回答ありがとうございました。
(Dvl:ドライブリストボックスコントロール,Drl:ディレクトリリストボックスコントロール)
たしかに,Dvl_Change()の直下にDrl.path = Dvl.Driveと宣言してました。
そのため,他のコントロールも連動して変更されたと思います。
いま,ドライブの変更でエラーが発生した場合,以下のように設定してます。
If Err <> 0 Then
MsgBox Err.Description, vbExclamation +vbOKOnly 'dvl.Drive = str_FilPath
drl.Path = str_DrePath
Exit Sub
End If
str_**は以前の状態のパスを格納してます。
上記の場合はエラーが発生した時,ディレクトリとファイルのリストは以前の状態に
戻りますが,ドライブはエラーがでたドライブ名のまま表示されてしまいます。
そこで,コメント文をはずして実行するとドライブが変更されたとして実行されてしまいます。このとき,以前の状態にはもどらずカレントの状態が表示されてしまいます。
だから何?最初の質問もそうだけど自分で書いたコードに
原因があるんじゃないの?それは本来、こちらでは分からない
事だよ?デバッグして原因を書いて下さい。
フラグを立てて以前の表示になるようにはできました。
ただ,ドライブの選択でエラーが発生した時,1回目のみ
以前のパスではなくてカレントのパスに戻ってしまいます。
2回目以降はドライブの選択でエラーがでたら以前の選択状態に
戻るのですが・・・
デバッグで確かめたとこの
Dvl_Change()
drl.path = dvl.drive
:
Drl_Change()
fil.path = drl.path
:
あいまいですが上記のようなコードを書いていてドライブのチェンジの
イベントではdrl.pathにエラー以前の選択したパスが入っているのに
次にディレクトリのチェンジイベントに移った瞬間,カレントのパスに変化して
いました。2回目以降は正常というか思ったとおりに動作はしているの
ですが・・・
私の知識不足ですいません。
drl.Path = dvl.Drive
は
drl.Path = "C: [ローカル ディスク]"
とかだからマズイねぇ。
drl.Path = "C:\"
に編集しないといけなくない?
ツイート | ![]() |