OVH Cloud OVH Cloud

comment placer un ListViewItem à une position spécifique ?

4 réponses
Avatar
Herbert VON GRÜNENWALD
bonjour à tous,

Comment placer les items d'un ListView avec des coordonnées ?

(en MFC il y avait CListCtrl.SetItemPosition(...))

merci

4 réponses

Avatar
Paul Bacelar
"Herbert VON GRÜNENWALD" wrote in
message news:#
bonjour à tous,

Comment placer les items d'un ListView avec des coordonnées ?

(en MFC il y avait CListCtrl.SetItemPosition(...))

merci



Le control ListView de C# est bien mieux conçu du point de vue Objet que la
CListCtrl des MFC.

Il faut donc commencer par voir l'ensemble des propriétés et méthodes
offertes par ce control. Cela permet d'utiliser des concepts de haut niveau
pour spécifier le layout des objets affichés dans ce contrôle.

Comme tout control, ListView contient une propriété "Controls" qui regroupe
tous les sous contrôles de la ListView, si le coeur vous en dis de modifier
un à un leur "Location" et leur "Size".


--
Paul Bacelar
Avatar
Herbert VON GRÜNENWALD
Paul Bacelar wrote:
"Herbert VON GRÜNENWALD" wrote in
message news:#

bonjour à tous,

Comment placer les items d'un ListView avec des coordonnées ?

(en MFC il y avait CListCtrl.SetItemPosition(...))

merci




Le control ListView de C# est bien mieux conçu du point de vue Objet que la
CListCtrl des MFC.

Il faut donc commencer par voir l'ensemble des propriétés et méthodes
offertes par ce control. Cela permet d'utiliser des concepts de haut niveau
pour spécifier le layout des objets affichés dans ce contrôle.

Comme tout control, ListView contient une propriété "Controls" qui regroupe
tous les sous contrôles de la ListView, si le coeur vous en dis de modifier
un à un leur "Location" et leur "Size".





J'ajoute mes ListViewItem dans ma ListView avec ListView.Items.Add
Mais ListViewItem.Controls est vide !

La raison en est, je pense, qu'un ListViewItem n'est pas un Control (il
n'en hérite pas).

et je vois bien en debug:
ListView.Items.Count = 48
ListView.Controls.Count = 0



peut-on 'transformer' un ListViewItem en Control ?
sinon comment faire ?

merci
Avatar
Herbert VON GRÜNENWALD
Herbert VON GRÜNENWALD wrote:
Paul Bacelar wrote:

"Herbert VON GRÜNENWALD" wrote in
message news:#

bonjour à tous,

Comment placer les items d'un ListView avec des coordonnées ?

(en MFC il y avait CListCtrl.SetItemPosition(...))

merci





Le control ListView de C# est bien mieux conçu du point de vue Objet
que la
CListCtrl des MFC.

Il faut donc commencer par voir l'ensemble des propriétés et méthodes
offertes par ce control. Cela permet d'utiliser des concepts de haut
niveau
pour spécifier le layout des objets affichés dans ce contrôle.

Comme tout control, ListView contient une propriété "Controls" qui
regroupe
tous les sous contrôles de la ListView, si le coeur vous en dis de
modifier
un à un leur "Location" et leur "Size".





J'ajoute mes ListViewItem dans ma ListView avec ListView.Items.Add
Mais ListViewItem.Controls est vide !

La raison en est, je pense, qu'un ListViewItem n'est pas un Control (il
n'en hérite pas).

et je vois bien en debug:
ListView.Items.Count = 48
ListView.Controls.Count = 0



peut-on 'transformer' un ListViewItem en Control ?
sinon comment faire ?

merci




il me parait plus simple d'envoyer le message avec SendMessage:
from

--------------------------------------------------
Declare as below the structure

[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.
LayoutKind.Sequential, Pack=2)]
public struct MAKELPARAM
{
public uint wLow;
public uint wHigh;
}

Import the method:

[System.Runtime.InteropServices.DllImport("User32.dll")]
public extern static int SendMessage(IntPtr hwnd, uint message, int wparam,
MAKELPARAM lparam);

And finally, in a method, put the code:

MAKELPARAM M = new MAKELPARAM();
M.wHigh = x //New x-position of the item's upper-left corner, in view
coordinates.

M.wLow = y //New y-position of the item's upper-left corner, in view
coordinates. ;

int i = myitem;
SendMessage(listView1.Handle, 0x1000 + 15, i, M);

Hope that helps.
Best regards.
Avatar
Paul Bacelar
"Herbert VON GRÜNENWALD" wrote in
message news:
Herbert VON GRÜNENWALD wrote:
> Paul Bacelar wrote:
>
>> "Herbert VON GRÜNENWALD" wrote in
>> message news:#
>>
>>> bonjour à tous,
>>>
>>> Comment placer les items d'un ListView avec des coordonnées ?
>>>
>>> (en MFC il y avait CListCtrl.SetItemPosition(...))
>>>
>>> merci
>>
>>
>>
>> Le control ListView de C# est bien mieux conçu du point de vue Objet
>> que la
>> CListCtrl des MFC.
>>
>> Il faut donc commencer par voir l'ensemble des propriétés et méthodes
>> offertes par ce control. Cela permet d'utiliser des concepts de haut
>> niveau
>> pour spécifier le layout des objets affichés dans ce contrôle.
>>
>> Comme tout control, ListView contient une propriété "Controls" qui
>> regroupe
>> tous les sous contrôles de la ListView, si le coeur vous en dis de
>> modifier
>> un à un leur "Location" et leur "Size".
>>
>>
>
> J'ajoute mes ListViewItem dans ma ListView avec ListView.Items.Add
> Mais ListViewItem.Controls est vide !
>
> La raison en est, je pense, qu'un ListViewItem n'est pas un Control (il
> n'en hérite pas).
>
> et je vois bien en debug:
> ListView.Items.Count = 48
> ListView.Controls.Count = 0
>
>
>
> peut-on 'transformer' un ListViewItem en Control ?
> sinon comment faire ?
>
> merci


il me parait plus simple d'envoyer le message avec SendMessage:
from

--------------------------------------------------
Declare as below the structure




[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.
LayoutKind.Sequential, Pack=2)]
public struct MAKELPARAM
{
public uint wLow;
public uint wHigh;
}

Import the method:

[System.Runtime.InteropServices.DllImport("User32.dll")]
public extern static int SendMessage(IntPtr hwnd, uint message, int


wparam,
MAKELPARAM lparam);

And finally, in a method, put the code:

MAKELPARAM M = new MAKELPARAM();
M.wHigh = x //New x-position of the item's upper-left corner, in view
coordinates.

M.wLow = y //New y-position of the item's upper-left corner, in view
coordinates. ;

int i = myitem;
SendMessage(listView1.Handle, 0x1000 + 15, i, M);

Hope that helps.
Best regards.



Après un coup de reflector, il d'avère que ListView .NET est un mince
wrapper au-dessus de Win32, comme en MFC.

C'est un code qu'il faudra surveiller de très près en cas d'évolution de
FrameWork car c'est une utilisation de propriétés non documentées.


--
Paul Bacelar