Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Redimensionnement d'une colonne d'un contrôle ListView

5 réponses
Avatar
Jmb
Rebonjour,
Existe-t-il un événement pour intercepter un redimensionnement d'une colonne
d'un contrôle ListView?
Merci.

5 réponses

Avatar
Lebrun Thomas
Non, a ma connaissance, il n'y en a pas.

Pourquoi, tu veux empêcher le redimensionnement d'une colonne d'un contrôle
ListView ? Car si c'est ca, j'ai un bout de code pour toi :)


A+


LEBRUN Thomas.

-------------------------------

"Jmb" a écrit :

Rebonjour,
Existe-t-il un événement pour intercepter un redimensionnement d'une colonne
d'un contrôle ListView?
Merci.


Avatar
Jmb
J'ai simplement besoin de mémoriser la taille des colonnes à chaque fois
qu'elles sont modifiiées.

"Lebrun Thomas" a écrit :

Non, a ma connaissance, il n'y en a pas.

Pourquoi, tu veux empêcher le redimensionnement d'une colonne d'un contrôle
ListView ? Car si c'est ca, j'ai un bout de code pour toi :)


A+


LEBRUN Thomas.

-------------------------------

"Jmb" a écrit :

> Rebonjour,
> Existe-t-il un événement pour intercepter un redimensionnement d'une colonne
> d'un contrôle ListView?
> Merci.


Avatar
Lebrun Thomas
Ok, mais il n'y a pas d'evenement pour le redimensionnement des colonnes d'un
listview.

Peut-être voir du coté des ColumnsHeader....

A+


"Jmb" a écrit :

J'ai simplement besoin de mémoriser la taille des colonnes à chaque fois
qu'elles sont modifiiées.

"Lebrun Thomas" a écrit :

> Non, a ma connaissance, il n'y en a pas.
>
> Pourquoi, tu veux empêcher le redimensionnement d'une colonne d'un contrôle
> ListView ? Car si c'est ca, j'ai un bout de code pour toi :)
>
>
> A+
>
>
> LEBRUN Thomas.
>
> -------------------------------
>
> "Jmb" a écrit :
>
> > Rebonjour,
> > Existe-t-il un événement pour intercepter un redimensionnement d'une colonne
> > d'un contrôle ListView?
> > Merci.


Avatar
Zoury
Bonjour messieurs! :O)

Ok, mais il n'y a pas d'evenement pour le redimensionnement des colonnes


d'un
listview.



Exact.

On peut toutefois définir une classe héritant de ListView et qui override la
procédure WndProc(). Un message WM_NOTIFY est envoyé au listview avec le
code HDN_BEGINTRACKA ou HDN_BEGINTRACKW lorsque l'utilisateur s'apprête a
redimensionner les colonnes. Il faut capter ce message, retourné TRUE dans
le membre Result du message et ne pas appelé la méthode WndProc() de la
classe Listview (base.WndProc())

Exemple :
//***
using System;
using System.Runtime.InteropServices;

namespace ColumnWidthSolution
{
public class ListViewEx : System.Windows.Forms.ListView
{
public ListViewEx() {}

private Int32 WM_NOTIFY = 0x4E;
private static Int32 HDN_FIRST = -300;
private Int32 HDN_BEGINTRACKA = (HDN_FIRST - 6);
private Int32 HDN_BEGINTRACKW = (HDN_FIRST - 26);

[StructLayout(LayoutKind.Sequential)]
private struct NMHDR
{
public Int32 hwndFrom;
public Int32 idFrom;
public Int32 code;
}

[StructLayout(LayoutKind.Sequential)]
private struct NMHEADER
{
public NMHDR hdr;
public Int16 iItem;
public Int16 iButton;
public Int32 pitem;
}

protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_NOTIFY)
{
NMHEADER nmh = (NMHEADER)Marshal.PtrToStructure(m.LParam,
typeof(NMHEADER));
if (nmh.hdr.code == HDN_BEGINTRACKA || nmh.hdr.code == HDN_BEGINTRACKW)
{
// l'utilisateur s'apprête à redimensionner les colonnes..
// nmh.iItem nous renvoit l'index de cette dernière.
Console.WriteLine("Colonne : {0}", nmh.iItem.ToString());
// pour éviter le redimensionnement
// il faut retourner TRUE et ne pas appelé base.WndProc()
m.Result = (IntPtr)1;
return;
}
}
base.WndProc(ref m);
}
}
}
//***


Tu utilise le contrôle ListViewEx de la même manière que ListView standard.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic Classique
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/
Avatar
Zoury
> > J'ai simplement besoin de mémoriser la taille des colonnes à chaque fois
> qu'elles sont modifiiées.



Il faut capter ce message, retourné TRUE dans
le membre Result du message et ne pas appelé la méthode WndProc() de la
classe Listview (base.WndProc())



... a force chercher une solution, j'ai fini par perdre l'essence du
problème.. Étant donnée que tous ce que tu souhaites c'est récupérer la
taille des colonnes avant que celles-ci soient redimensionnées, tu n'as pas
à exécuter les actions décrites ci-haut (elle empêchent le
redimensionnement).

Tu aurais seulement :
//***
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_NOTIFY)
{
NMHEADER nmh = (NMHEADER)Marshal.PtrToStructure(m.LParam,
typeof(NMHEADER));
if (nmh.hdr.code == HDN_BEGINTRACKA || nmh.hdr.code == HDN_BEGINTRACKW)
{
// mets ton code ici..
}
}
// on appelle la WndProc() originale.
base.WndProc(ref m);
}
}
//***


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic Classique
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/