FAQ C++/CLI et VC++.NetConsultez toutes les FAQ

Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013 

 
OuvrirSommaireIntéraction du C++/CLI avec le framework .NetWinFormsListView

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.

 
Sélectionnez

for each (ListViewItem ^lvi in this->listView1->Items)
{
	lvi->UseItemStyleForSubItems = false;
	lvi->SubItems[0]->BackColor = Color::Yellow;
}
this->listView1->View = View::Details;
				
Créé le 9 mai 2006  par nico-pyright(c), neguib

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

Créé le 9 mai 2006  par nico-pyright(c)
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.