投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/6/4 16:19:23
> [code]
code ではなく CODE です。


> 正しい並び替えになりませんでした。
複数列の並び替えが必要な場合は IComparer が必要ですが、
単一列の並び替えなら SortCompare イベントだけで済みますよ。

Public Class Form1
    Private WithEvents dgv As DataGridView
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dgv = New DataGridView() With {.Dock = DockStyle.Fill}
        dgv.AllowUserToAddRows = False
        dgv.ColumnCount = 2
        Controls.Add(dgv)
        dgv.Rows.Add(1, "file1.txt")
        dgv.Rows.Add(2, "file10.txt")
        dgv.Rows.Add(3, "file2.txt")
        dgv.Rows.Add(4, "file3.txt")
    End Sub
    Private Sub dgv_SortCompare(sender As Object, e As DataGridViewSortCompareEventArgs) Handles dgv.SortCompare
        If e.Column.Index = 1 Then
            e.SortResult = StrCmpLogicalW(e.CellValue1, e.CellValue2)
            e.Handled = True
        Else
            e.Handled = False
        End If
    End Sub
    Private Declare Unicode Function StrCmpLogicalW Lib "shlwapi" (x As String, y As StringAs Integer
End Class