ソートが旬ということで...
話題の方向性とは、ちょっと違いますが...
このリストをソートしようとすると...
こうなります。単にListBoxのSortをtrueに
するだけでは、1の次に10が来てしまったりして
数字順に並びませんね。そこで、
StrCmpLogicalWというAPIを使い並び替えを
行います。エクスプローラのファイル名順と同じ
並び替えが実現できます。
ソースの例は下記を参照してください。(Visual C# 2008)
private void button1_Click(object sender, EventArgs e)
{
listBox1.Sorted = true;
}
private void button2_Click(object sender, EventArgs e)
{
List<string> items =
new List<string>(listBox1.Items.OfType<string>());
items.Sort(new NumericComparer());
listBox2.Items.Clear();
listBox2.Items.AddRange(items.ToArray());
}
public class NumericComparer
: System.Collections.Generic.IComparer<string>
{
[System.Runtime.InteropServices.DllImport(
"shlwapi.dll",
CharSet = System.Runtime.InteropServices.CharSet.Unicode,
ExactSpelling = true)]
public static extern int StrCmpLogicalW(string x, string y);
public int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
}
投稿日時 : 2008年7月8日 3:22