Listviewex : tout selectionner , tout deselectionner

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 229 fois - Téléchargée 26 fois

Contenu du snippet

- ListView Derivé pour ajouter deux fonctions de base mais très pratique

Tout selectionner et inversement en utilisant les API win32

Source / Exemple :


using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ListViewEx
{
	/// <summary>
	/// Description résumée de ListViewEx.
	/// </summary>
	public class ListViewEx : System.Windows.Forms.ListView 
	{
		[DllImport("user32.dll")]
		public static extern bool SendMessage(IntPtr hWnd, ListViewMessages msg,
			Int32 wParam, ref LV_ITEM lParam);
		

		#region LV_ITEM
		[StructLayoutAttribute(LayoutKind.Sequential)]
		public struct LV_ITEM
		{
			public ListViewItemFlags mask;
			public Int32 iItem;
			public Int32 iSubItem;
			//public ListViewItemStates state;
			public ListViewItemStates state;
			public ListViewItemStates stateMask;
			public String pszText;
			public Int32 cchTextMax;
			public Int32 iImage;
			public IntPtr lParam;
			public Int32 iIndent;
		}
		#endregion

		#region ListViewItem States / LVIS
		/// <summary>
		/// ListViewItemState / LVIS
		/// </summary>
		public enum ListViewItemStates : int
		{
			NOSTATE			   = 0x0000,
			FOCUSED            = 0x0001,
			SELECTED           = 0x0002,
			CUT                = 0x0004,
			DROPHILITED        = 0x0008,
			GLOW               = 0x0010,
			ACTIVATING         = 0x0020,
			OVERLAYMASK        = 0x0F00,
			STATEIMAGEMASK     = 0xF000,
		}
		#endregion
		#region LVM
		public enum ListViewMessages : int
		{
			FIRST				= 0x1000,
			SCROLL				= FIRST + 20,
			GETITEM				= FIRST + 75,
			SETITEM				= FIRST + 76,
			GETITEMTEXTW		= FIRST + 115,
			SETCOLUMNWIDTH		= FIRST + 30,
			LVSCW_AUTOSIZE			= -1,
			LVSCW_AUTOSIZE_USEHEADER= -2,
			SETITEMSTATE		= FIRST + 43,
			INSERTITEMA			= FIRST + 77,
			DELETEITEM			= FIRST + 8,
			GETITEMCOUNT		= FIRST + 4,
			GETCOUNTPERPAGE		= FIRST + 40,
			GETSUBITEMRECT		= FIRST + 56,
			SUBITEMHITTEST		= FIRST + 57,
			GETCOLUMN			= FIRST + 25,
			SETCOLUMN			= FIRST + 26,
			GETCOLUMNORDERARRAY	= FIRST + 59,
			SETCOLUMNORDERARRAY	= FIRST + 58,
			SETEXTENDEDLISTVIEWSTYLE= FIRST + 54,
			GETEXTENDEDLISTVIEWSTYLE= FIRST + 55,
			EDITLABELW			= FIRST + 118,
			GETITEMRECT        = FIRST + 14,
			HITTEST            = FIRST + 18,
			GETEDITCONTROL     = FIRST + 24,
			CANCELEDITLABEL	   = FIRST + 179,
			GETHEADER          = FIRST + 31,
			REDRAWITEMS        = FIRST + 21,
			GETSELECTIONMARK   = FIRST + 66,
			SETSELECTIONMARK   = FIRST + 67,
			ENSUREVISIBLE       = (FIRST + 19),
		}
		#endregion LVM
		#region ListViewItem Flags / LVIF
		/// <summary>
		/// ListViewItem Flags / LVIF
		/// </summary>
		public enum ListViewItemFlags : int
		{
			TEXT               = 0x0001,
			IMAGE              = 0x0002,
			PARAM              = 0x0004,
			STATE              = 0x0008,
			INDENT             = 0x0010,
			NORECOMPUTE        = 0x0800,
			GROUPID            = 0x0100,
			COLUMNS            = 0x0200,
		}
		#endregion
		private System.ComponentModel.Container components = null;

		public ListViewEx(System.ComponentModel.IContainer container)
		{
			container.Add(this);
			InitializeComponent();
		}

		public ListViewEx()
		{
			InitializeComponent();
			this.FullRowSelect = true;
		}

			protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Code généré par le Concepteur de composants
		/// <summary>
		/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
		/// le contenu de cette méthode avec l'éditeur de code.
		/// </summary>
		private void InitializeComponent()
		{
			components = new System.ComponentModel.Container();
		}
		#endregion

		public void SelectAll ()
		{
			LV_ITEM lv = new LV_ITEM();
			lv.mask = ListViewItemFlags.STATE;
			lv.state = ListViewItemStates.SELECTED ;
			lv.stateMask = ListViewItemStates.SELECTED;
			SendMessage(this.Handle,ListViewMessages.SETITEMSTATE,-1,ref lv);
		}

		public void UnselectAll()
		{
			LV_ITEM lv = new LV_ITEM();
			lv.state = ListViewItemStates.NOSTATE;
			lv.mask = ListViewItemFlags.STATE ;
			lv.stateMask = ListViewItemStates.SELECTED;
			SendMessage(this.Handle,ListViewMessages.SETITEMSTATE, -1, ref lv);
		}

	}
}

Conclusion :


C'est simple mais ca peut servir et c'est toujours plus rapide qu'une boucle :>

A voir également

Ajouter un commentaire

Commentaires

Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1
euj, j'arrive p'être un peut tard lol, mais t'as remarque m'interesse kangoo06. En fait en ce moment j'essai de changer la couleur de la ligne séléctionnée, mais je n'y arrive pas ? apparament on doit pouvoir le faire avec cette API, mais quelle proprieté utiliser et comment définir la couleur ??
Merci d'avance ;-)
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
15
clair , d'ailleurs si tu as fais un composant plus complet tu peux le mettre :)
Messages postés
7
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
13 septembre 2004

Ceci dit, ce code peut servir de base pour implémenter plein d'autres fonctionnalités, comme le rendu d'un élément selectionné (entièrement bleuté ou juste la bordure ... ;o) ) C'est quand même vachement bien le SendMessage !
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
15
Bien entendu toutes les constantes ne sont pas nécessaires.
Et pour ceux qui ne l'avait pas remarqué il s'agit d'un composant derivé du ListView ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.