FAQ C++/CLI et VC++.Net
FAQ C++/CLI et VC++.NetConsultez toutes les FAQ
Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013
L'objet ListViewSubItem a une propriété BackColor mais pour que l'assignation soit effective il ne faut pas oublier de modifier la propriété UseItemStyleForSubItems du ou des ListViewItem concerné(s) en lui attribuant la valeur false.
Si vous souhaitez effectuer cette manoeuvre par programmation, voici un exemple :
Coloration en jaune de toute la première colonne d'un ListView1.
for
each (ListViewItem ^
lvi in this
->
listView1->
Items)
{
lvi->
UseItemStyleForSubItems =
false
;
lvi->
SubItems[0
]->
BackColor =
Color::
Yellow;
}
this
->
listView1->
View =
View::
Details;
L'objet ListView dispose d'une propriété ListViewItemSorter de type IComparer. Cela permet d'implémenter sa propre gestion du tri.
Pour ce faire, il faut créer une classe dérivant de IComparer implémentant la méthode Compare.
ref class
ListViewItemComparer: public
IComparer
{
private
:
int
col;
SortOrder sortOrder;
public
:
ListViewItemComparer()
{
col =
0
;
sortOrder =
SortOrder::
Ascending;
}
ListViewItemComparer( int
column )
{
col =
column;
sortOrder =
SortOrder::
Ascending;
}
ListViewItemComparer( int
column, SortOrder s )
{
col =
column;
sortOrder =
s;
}
virtual
int
Compare( Object^
x, Object^
y )
{
if
(sortOrder ==
SortOrder::
Ascending)
return
String::
Compare(safe_cast<
ListViewItem^>
(x)->
SubItems[col]->
Text,
safe_cast<
ListViewItem^>
(y)->
SubItems[col]->
Text);
else
return
String::
Compare(safe_cast<
ListViewItem^>
(y)->
SubItems[col]->
Text,
safe_cast<
ListViewItem^>
(x)->
SubItems[col]->
Text);
}
}
;
Ensuite, il suffit d'intercepter le click sur les colonnes (événement ColumnClick) et d'instancier cette classe.
private
:
System::
Void listView1_ColumnClick(System::
Object^
sender, System::Windows::Forms::
ColumnClickEventArgs^
e)
{
if
(this
->
listView1->
Sorting ==
SortOrder::
Ascending)
this
->
listView1->
Sorting =
SortOrder::
Descending;
else
this
->
listView1->
Sorting =
SortOrder::
Ascending;
this
->
listView1->
ListViewItemSorter =
gcnew ListViewItemComparer( e->
Column, this
->
listView1->
Sorting );
}
Remarque : J'effectue ici une comparaison de chaînes, il faudra implémenter différemment si on compare des nombres par exemple.