Seznam List má metodu Sort, která jako parametr bere objekt implementující rozhraní IComparer, což je nástroj, který definuje, jakým způsobem se bude porovnávat. Takže vytvořte třídu třeba ControlsComparer, která bude vypadat zhruba takto:
Public Class ControlsComparer
Implements IComparer(Of Control)
Public Function Compare(ByVal x As Control, ByVal y As Control) As Integer _
Implements IComparer(Of Control).Compare
Return x.Top.CompareTo(y.Top)
End Function
End Class
Pro setřídění stačí zavolat
muj_list.Sort(new ControlsComparer())
Komparátor obsahuje metodu Compare, která vrátí 1, 0 nebo -1 podle toho, jestli je první objekt větší, roven či menší než druhý objekt. Protože porovnáváme komponenty, ale x a y jsou typu Object, přetypujeme si oba parametry na Control, abychom na nich viděli vlastnost Top. To, jestli je komponenta větší než druhá zjistíme zavoláním metody CompareTo na typu Integer, která dělá to samé - vrací -1, 0 nebo 1. Sort pak tenhle komparátor použije pro určení, která komponenta má být v seznamu před kterou. Stačí to takhle?
|