Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LISTVIEWEX : TOUT SELECTIONNER , TOUT DESELECTIONNER


Information sur la source

Catégorie :API Source .NET ( DotNet ) Classé sous : listview, sélection Niveau : Initié Date de création : 17/02/2004 Vu : 11 092

Note :
6 / 10 - par 3 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

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

Tout selectionner et inversement en utilisant les API win32
 

Source

  • 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);
  • }
  • }
  • }
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 :>

 

Commentaires et avis

signaler à un administrateur
Commentaire de TheSaib le 17/02/2004 13:39:00 administrateur CS

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 ...

signaler à un administrateur
Commentaire de Kangoo06 le 19/02/2004 21:35:51

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 !

signaler à un administrateur
Commentaire de TheSaib le 20/02/2004 00:43:09 administrateur CS

clair , d'ailleurs si tu as fais un composant plus complet tu peux le mettre :)

signaler à un administrateur
Commentaire de Mike le 16/06/2004 09:49:54

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 ;-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

ListView et couleur selection items [ par YLSEAGLE ] Bonjour &#224; tous. Je cherche &#224; changer la couleur de s&#233;lection d'un item dans une listview. Par d&#233;faut, celle ci est de couleur bleu Sélection automatique d'1 item dans la listView [ par oboudou ] Bonjour,J'aimmerais sélectionner "par la programmation" un item dans la listView. Ex : J'aimerais que dans ma listeView ma troisieme ligne soit sélect Forms.ListView, SelectedIndexChanged et clignotement [ par MyXiLo ] Bonsoir.L'évènement SelectedIndexChanged se déclenche lorsque la sélection dans un ListView change. Le problème est que lorsqu'un Item est déjà select listview sélection étendue [ par parabolus ] Bonjour J'ai une listview, (View=Details, Multiselect=true, FullRowSelect=true). Quand je pointe la souris sur une ligne et que je la déplace ensuite ListView et checkbox, contrainte de sélection [ par vagg ] Bonjour à tous,J'ai actuellement une ListView en mode Détails !dans cette ListView j'ai plusieurs objets qui sont cochable par des Checkbox, parcontre ListView : Image bleu pendant la sélection d'un item [ par EmacLi ] Bonjour à tous, J'ai remarqué que lors de la sélection d'un item dans une listview, l'image est aussi sélectionné en bleu. Comportement que n'a appar Replir une listvieuw rapidement et efficacement [ par VladDracula ] Bonjour,je voudrais savoir qu'elle est la meilleur solution pour remplir une listview ?Je m'explique : j'ai 3 colonnes (ID, nom, level ) et j'ai a ma Afficher le contenu de listview ligne par ligne [ par sandra22 ] Bonjour,Comment afficher le contenu de listview ligne par ligne? Parceque la recherche prendra du temps, je veux qu'une fois les informations d'une li interaction entre deux forms [ par Toxic64 ] Bonjour, Ma question est assez simple et j'imagine que la réponse l'est aussi mais étant débutant en C#,je seche. Voici la problèmatique: Dans un p ListView : Ajouter des éléments (C#) [ par Wolf ] Voilà mon problème :Comment faire pour ajouter des éléments dans une ListView pendant l'exécution du programme?J'avais pensé faire ça ds la fonction O


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,889 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.