1

したがって、2つのリストボックスがあります。Listbox1はディレクトリからファイルを収集し、選択したファイルをListbox1からListbox2に追加するための追加ボタンがあります。

これらのアイテムを手動で並べ替える方法はありますか?たぶん上下のボタンで?

並べ替え/並べ替えを行う理由は、選択したファイルを実行するプロセスがあり、各ファイルがファイル名に固有の別のファイルを生成する必要があるためです。

簡単な例は、FILE1.txtを処理し、FILE1.pdfなどを生成することです。

並べ替え/並べ替えを実行する簡単な方法はありますか?

アップデート

listbox1に何かを追加する前に、現在、これがどのように入力されているかを示していますlistbox2。これは、なんらかの方法で並べ替えたいリストボックスです。

Dim directoryInfo As _
    New System.IO.DirectoryInfo(FolderBrowserDialog1.SelectedPath)
Dim fileInfos() As System.IO.FileInfo

fileInfos = directoryInfo.GetFiles()
For Each fileInfo As System.IO.FileInfo In fileInfos
    ListBox1.DataSource = _list
    _list.Add(fileInfo.Name)
    _list.Sort()
Next

'Refresh Listbox1
ListBox1.DataSource = Nothing
ListBox1.DataSource = _list
4

2 に答える 2

2

に項目を 1 つずつ追加する代わりに、データ バインディングを使用できますListBox。最初にファイルをリストに追加してから、リストをソートして に割り当てることをお勧めしListBoxますDataSource

クラスメンバーのリストを定義する

Private _list As New List(Of String)()

に割り当てます。ListBox

 listBox1.DataSource = _list

次に、新しいリストエントリを追加します

_list.Add("new file")
_list.Sort()

' Refresh the ListBox
listBox1.DataSource = Nothing
listBox1.DataSource = _list

アップデート

独自のソート順を実装する場合は、IComparer(Of String)

Class MyFileComparer
    Implements IComparer(Of String)

    Public Function Compare(x As String, y As String) As Integer _
        Implements IComparer(Of String).Compare 

        Const  AlwaysFirst As String = "FILE1"

        Dim x = If(x.Contains(AlwaysFirst), "1_", "2_") & x
        Dim y = If(y.Contains(AlwaysFirst), "1_", "2_") & y

        ' Note: If "FILE1" appears always at the end then this would be better
        'Dim x = If(x.EndsWith(AlwaysFirst & ".txt"), "1_", "2_") & x
        'Dim y = If(y.EndsWith(AlwaysFirst & ".txt"), "1_", "2_") & y

        ' Normalize strings (e.g. if "File_123.txt" = ""File 123.txt")
        x = x.Replace("_"C, " "C)
        y = y.Replace("_"C, " "C)

        Return x.CompareTo(y)
    End Function
End Class

次に、このように並べ替えることができます

Static comparer =  New MyFileComparer()

_list.Sort(comparer)

更新#2

ファイルの正確な名前はわかりませんが、常に で終わる場合は、"FILE<number>.<ext>"次のように文字列比較のファイル名を変更することもできます。

元のファイル名

abc_FILE1.txt
abc_123_FILE2.txt
sssd_FILE23.txt
xxx_24_FILE073.txt

用意されたファイル名

FILE001_abc.txt
FILE002_abc_123.txt
FILE023_sssd.txt
FILE073_xxx_24.txt

これで、Compareメソッドは次のように簡単に結果を決定できます

Return x_prepared.CompareTo(y_prepared)
于 2012-04-19T15:21:31.563 に答える
2

オリヴィエの答えに便乗して、おそらくソートされたリストがあなたのために働くかもしれませんか?

アルファ名の並べ替え以上のものが必要な場合は、OrderBy を使用してアイテムを並べ替えることもできます。

 var sorted = from m in myCollection select m orderBy m.FileName; 

(構文がオフになっている可能性があります)

于 2012-04-19T15:25:15.360 に答える