Refresh後にファイル選択の状態にするには?

解決


生茶  2005-06-20 18:50:02  No: 122823  IP: [192.*.*.*]

度々失礼致します。

FileListBoxに関しましてご教授ください。

FileListBoxにおきまして、Refreshメソッドを実行した際、
それまで選択していましたファイル名がNonActiveとなってしまいます。
これを防ぐ良い方法は御座いませんでしょうか?

Refresh後にファイル選択状態にする方法です。

ご回答宜しくお願い致します。m(__)m

編集 削除
通ってみた  2005-06-21 00:32:44  No: 122824  IP: [192.*.*.*]

ListIndex?

編集 削除
犬ひろし  2005-06-21 09:25:36  No: 122825  IP: [192.*.*.*]

こんな感じ

    Dim vv As String
    Dim c As Long
    vv = File1.List(File1.ListIndex)
    File1.Refresh
    For c = 0 To File1.ListCount - 1
        If vv = File1.List(c) Then File1.Selected(c) = True
    Next c

編集 削除
生茶  2005-06-21 10:34:44  No: 122826  IP: [192.*.*.*]

通ってみた様
犬ひろし様

  有難う御座いました。
FileListBoxのKeyDownイベントにてDeleteキー押下時に
ファイル削除機能を作成しておりました。
犬ひろし様のコードにて確認が取れましたので解決とさせて頂きます。
以下コードです。    有難う御座いました。

Private Sub File1_KeyDown(KeyCode As Integer, Shift As Integer)
    On Error GoTo ERRPOINT
   
    Dim YesNo As String
    Dim c As Long
    
    'ファイル削除機能「Deleteキー押下時」
    If KeyCode = vbKeyDelete Then
        YesNo = MsgBox("削除しますか?", vbYesNo + vbQuestion + vbDefaultButton2)
        If YesNo = vbYes Then
            If File1.FileName = "" Then
                goto ERRPOINT
            Else
                Kill (File1.Path & "\" & File.FileName)
                'リフレッシュ
                File1.Refresh
                'ファイル選択
                For c = 0 To File1.ListCount - 1
                    If File1.List(c) <> "" Then File1.Selected(c) = True
                Next c
            End If
        End If
    End If
    
ENDPOINT:
    Exit Sub
ERRPOINT:
    MsgBox "ファイル削除が出来ませんでした。", vbCritical, "エラーメッセージ"

End Sub

編集 削除
ぶぶ  2005-06-21 11:22:44  No: 122827  IP: [192.*.*.*]

生茶さん>解決に書いてるコードと犬ひろしさんのコード
若干意味が変わってるようですが、本当にうごきましたか?
リフレッシュする前の名前の待避及びリフレッシュ後の比較がないんだけど・・・
気のせい?
生茶さんのコードだとリフレッシュ後に先頭の項目が選択状態になると思うんです
けど・・

編集 削除
生茶  2005-06-21 12:36:18  No: 122828  IP: [192.*.*.*]

ぶぶ様

質問が悪かったのかもしれませんね。。

Deleteするので、ファイルがなくなってしまうのです。
私がほしい機能は、単に
>Refresh後にファイル選択状態にする方法
です。

ちなみに動いているのですが、何か不具合な箇所がありますでしょうか?f(**;
お気づきのところを教えてください。
宜しくお願いします。

編集 削除
ぶぶ  2005-06-21 13:28:38  No: 122829  IP: [192.*.*.*]

ただ単に最初の項目を選択するのでよかったら
>File1.Refresh
>'ファイル選択
>For c = 0 To File1.ListCount - 1
>    If File1.List(c) <> "" Then File1.Selected(c) = True
>Next c
の部分は単に
File1.Refresh       
if File1.ListCount >0 then
    File1.Selected(0) = True
end if

編集 削除
生茶  2005-06-21 14:26:03  No: 122830  IP: [192.*.*.*]

ぶぶ様

参考にさせて頂きます。

有難う御座いました。m(__)m

編集 削除
通ってみた  2005-06-21 19:21:26  No: 122831  IP: [192.*.*.*]

For c = 0 To File1.ListCount - 1
    If File1.List(c) <> "" Then File1.Selected(c) = True
Next c

は、For〜Nextする意味がないので、

File1.selected(File1.ListCount-1) = True

だけで同じものが実装できると思うがどうでしょうか

編集 削除
生茶  2005-06-22 10:43:10  No: 122832  IP: [192.*.*.*]

通ってみた様

  解決後のフォローを有難う御座います。

>File1.selected(File1.ListCount-1) = True

にて確認する事が出来ました。

私のほしい機能には
For〜Next文は不要でしたね・・・

あとは、Refresh後に先頭の項目を選択状態とするか、最後の項目を
選択状態とするかを検討し、

>if File1.ListCount >0 then
>    File1.Selected(0) = True
>end if

または

>File1.selected(File1.ListCount-1) = True

どちらかの方法で実装しようと思います。

有難う御座いました。

編集 削除