VB6リストビューの効率的な操作方法とは?

このQ&Aのポイント
  • VB6で作成したプログラムでリストビューを使用している際に、ディレクトリを移動するたびにListItemsコレクションをクリアしています。しかし、同じディレクトリに戻ってくると再取得が必要になり非効率的に感じています。
  • クリアせずにaddメソッドでコレクションを追加し、目的別に表示する方法はあるのでしょうか?
  • また、Temporary Internet Filesを表示する際にも毎回新規に再取得しているようですが、これが設計上好ましくないのかもしれません。
回答を見る
  • ベストアンサー

VB6 リストビューについて

少し前にVB6で作成したプログラムでファイルの一覧表示にリストビューを使っているのですが、 ディレクトリを移動するたびにListItemsコレクションをクリアしています。 特に今のところ支障なく稼働しているのですが、同じディレクトリに戻ってくると、 以前に作成したコレクションを再取得することになり、なんとなく非効率のように思っています。 クリアせずにaddメソドで追加したコレクションを目的別に表示できれば解決するのですが、 そのような方法があるのかも分かりません。 もし、方法が分かる方がいれば教えて頂きたいと思います。 あるいは設計上感心できないとかの意見も大歓迎いたします。 ちなみにExplorerでTemporary Internet Filesの中身を表示したときは 毎回新規に再取得しているようでした。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ListView自体にキャッシュ機能はないので、そこは自力で実装することになります。 ただしキャッシュを使うと、稼働中に追加・削除・変更されたファイルやフォルダの情報が反映されなくなります。これをチェックするために、一覧を取得することになればキャッシュの意味は皆無。 変更を監視する方法もありますが、不要な監視を解除したりキャッシュをどのタイミングで更新するのか等、気を回す場面が多くなります。 一覧の取得程度であればそれほど負荷はかからないと思います。一覧の取得に時間がかかる、あるいは、クライアントから可能な限りHDDへのアクセスを減らして欲しいといった依頼がない限り、現状のままでよいのではないか、というのが私の感想です。

hawkwind
質問者

お礼

回答ありがとうございます。 稼働中のマシンはやや古く非力で、質問に記したTemporaryなど 多数のファイルにアクセスするとしばらく固まってしまいます。 運用上は何千もあるファイルを扱うことはないのですが、 時折、ユーザの方で関係のないフォルダにアクセスして問題になっているようでした。 そこで今後の開発を見据えて質問させて頂きました。 しかし、キャッシュの機能がないのでは仕方ありませんね。 ポストメッセージを常時監視するのも必要性に疑問があるところは同意です。 おっしゃる通り、クライアントからの依頼があったら考えればいいことですね。

関連するQ&A

  • VB6.0初心者です。基本的なことですいません

    VB6.0初心者です。基本的なことですいません ListViewコントロールでListItemの追加がよくわかりません。  (1)Listview1.ListItems.Add.Text = objDrive.DriveLetter Listview1.ListItems.Add.SubItems(1) = objDrive.VolumeName と記述すると、1段ずれて表示されてしまいます。  (2)With Listview1.ListItems.Add()   .Text=objDrive.Driveletter  .SubItems(1)=objDrive.VolumeName   End With 又は、  (3)Dim lstItem as ListItem Set lstItem = ListView1.ListItems.Add() lstItem.text=objDrive.DriveLetter lstItem.SubItems(1)=objDrive.VolumeName の記述でうまくいくのですが、 なぜ、(1)だと1段ずれるのか、この理由がわかりません。よろしくお願いします。

  • VB6 リストビューのサブアイテムをクリックしてそのサブアイテムの値を

    VB6 リストビューのサブアイテムをクリックしてそのサブアイテムの値を取得したいのですが、サブアイテムのインデックスの取得方法がわかりません。どうすればいいか教えてください。

  • ListViewでのリスト表示(初歩的な質問です)

    WinXP Pro VB6.0で開発を行っています。 現在、ドラッグ&ドロップにより、ListViewでファイルのパスをリスト表示するプログラムを作成しています。 ListBoxではなくListViewを利用する理由は、パスの長さに合わせてスクロールバーを表示したいためです。 そこで、ドラッグ&ドロップイベントでファイルのパスを取得することは出来たのですが、単純なリスト表示ができません。 ListView1.ListItems.Add(, , tmpPath) でパスを追加しているのですが、プロパティの設定がよく分からずうまく表示できません。 Viewを2-lvwLstに変更し、何となく表示はしているのですが2列表示になり、縦のスクロールバーが表示されません。 なお、表示の際、ヘッダ部分は必要ありません。 また、パスのみの表示であるため、一項目の表示です。 プロパティの設定例を教えていただけませんか? 非常に初歩的な質問ですがよろしくお願いします。

  • VBAでのリストビューにおけるドロップイベント

    リストビューにファイルをドロップした場合、適切に処理がされるんですが、不適切なデータ(たとえばブラウザ等で選択した文字列がドロップされた)だと下記のところでデータ形式が一致しないというエラーが出てしまいます。 Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) With Me AppActivate Me.Caption .ListView1.ListItems.Clear If Data.Files.Count <> 1 Then Exit Sub  ←データの形式が一致しません (Dataに不適切な値が入っている) 不適切なデータが入力された際に処理を実行しないようにするにはどのような手段があるのでしょうか? ご回答よろしくお願いします。

  • Viewにインデックスは張れますか?

    件名の通りなのですが、作成したViewが遅くて困っています。 改善方法としてはViewを作成しないで従来のSQLにインデックスを張って取得する方法にしようかなと考えています。 なにかいい方法はありますか?

  • VB2005 ComboBoxの値の取得について

    VB入門者なのですがよろしくお願いします。 VB2005のComboBoxで、   ComboBox1.Items.Add("個人")   ComboBox1.Items.Add("クラス") ComboBox1.Items.Add("全体") これらの項目にそれぞれ値を取得させたいのですが、その方法がわかりません。 もしよろしければ、ご支援お願いします。

  • VB.NET2003のDataGridでコンボボックス

    こんにちは。 最近VB.NET(2003)を始めたばかりの初心者です。 DataGridにコンボボックスを作成する方法を探してまして、 http://dobon.net/vb/dotnet/datagrid/datagridcombobox.html に書いてあるようにDataGridTextBoxColumnクラスからの派生クラスを作成して呼び出してみました。 そうしたところ、コンボボックスが表示され、データのセットもきちんとできました。 しかし、そのコンボボックスで選択している値を取得する方法がわからなく困ってます。 たとえば Dim comboSorce As New DataTable("ComboBox") comboSorce.Columns.Add("DisplayMember", GetType(String)) comboSorce.Columns.Add("ValueMember", GetType(Integer)) comboSorce.Rows.Add(New Object() {"OK", 0}) comboSorce.Rows.Add(New Object() {"NG", 1}) というデータをコンボボックスにセットした場合 OK,NGという表示上の値は CStr(DataGrid1(row,col)) で取得できますが、実際の値を取得する方法がわかりません。 ご存知の方いらっしゃいましたら、ご教授ください。 それと、行毎に違う値(リストデータ)のコンボボックスを作成することはできますでしょうか? 以上です。よろしくお願いします。

  • Visual Basicでツリービューリストの項目数を増やすには?

    VB4でツリービューコントロールを使ってリストを作成するとある程度以上のノード数になるとindex errorになります。 正確には数えていませんが、感覚的に200行ぐらいです。 この制限を外す方法はありませんか? よろしくお願いします。

  • Access2000でディレクトリリストボックス?

    Access2000でフォームを作成しようとしているのですが VBのディレクトリリストボックスのようなものはAccessには ないのでしょうか? ActiveXコントロールでTree View Controlというのを 見つけたのですが、使い方がわかりません。 ご存知の方がいらっしゃいましたら、教えて下さい。

  • リストビューで最初に選択されたインデックスを取得したい

    リストビューについて質問いたします VC++5.0 & SDK で作成しています リストビューで最初に選択されたものを取得したいのですが (その選択がはずされれば次に選択されていたもの) GetFirstSelectedItemPositionはそれに相当するメッセージが 見当たらないのでSDKでは使えないようですが 何か良い方法はありませんでしょうか? よろしくお願いいたします

専門家に質問してみよう