Bonjour,
Je viens d'effecture une recherche mais j'ai pas trouvé...:oops:
comment fait-on pour bloquer le redimensionnement des colonnes d'un listview?
Merci
Version imprimable
Bonjour,
Je viens d'effecture une recherche mais j'ai pas trouvé...:oops:
comment fait-on pour bloquer le redimensionnement des colonnes d'un listview?
Merci
Moi non plus, pour l'instant. Mais je dois passer à autre chose maintenant. Peut-être qu'en cherchant du côté des API Windows...
Bonne chance.
Quelqu'un a t'il trouvé une solution car cela fait aussi un petit moment que je cherche?
A part biensur, de se servir de l'evenement OnResize des colonnes pour redimensionner en dur à leur taille originale.
Bonjour,
Tu as le choix...
Je te donne ici 2 solutions :
1) La plus facile : l'utilisation d'un timer pour restituer systématiquement les dimensions :
Formule du genre (pour chaque colonne) :
2) la plus élégante mais la plus complexe : masquer tes entêtes par un cadre invisible (un vrai, hein... pas du type où on peut "cliquer au travers")... Mais celle-là demande un niveau bien plus élevé.Code:ListView1.ColumnHeaders.Item(n).Width = .....
Il y en a d'autres, mais je crois que tu devrais te cantonner à la solution facile du timer.
Edit : tiens : une autre encore (bien que je ne l'aime pas du tout pour mille et une raisons ...) : interdire au cuseur de ta souris d'aller dans la zone où on peut modifier la taille des colonnes ).
Et une autre encore moins gourmande : laisser les modifications de taille se faire mais rétablir la situation au vrais moments "cruciaux" (au mousemove sur les colonnes elles-même , pas sur les headers), qui ne nécessite aucun timer.
J'arrête (car la liste des stratégies possibles est vraiment longue...)
Ok merci pour ces nombreuses solutions.
ps: Mr Microsoft merci de nous mettre une propriete true /false dans la prochaine version.
Tiens, j'ai voulu chercher un moyen de le faire pour pas trop cher et sans timer.
Idée :
1) le focus est donné à la listview si l'on utilise la souris dans sa partie supérieure (là où on peut modifier les largeurs)
2) on saisit alors l'évènement GotFocus pour "forcer la main"
3) il est alors clair qu'il faut à nouveau perdre de focus si on corrige, de sorte à obliger l'utilisateur à y revenir (et donc à passer à nouveau par l'évènement espion GorFocus).
Mécanisme, donc : si on corrige ===>> enabled False ===>> perte focus ===>> enabled True (tout bête mais efficace).
Exemple (ici pour former la 1ère colonne à rester à sa largeur (supposons 400) :
sans faille sur ma machine.Code:
1
2
3
4
5
6
7
8 Private Sub ListView1_GotFocus() madim = 400 If ListView1.ColumnHeaders.Item(1).Width = madim Then Exit Sub ListView1.ColumnHeaders.Item(1).Width = madim ListView1.Enabled = False ListView1.Enabled = True End Sub
Tu dis...
Edit : attention : il est clair que ta form doit pour ce faire contenir au moins un autre contrôle pouvant recevoir le focus (quel qu'il soit)
C'est une solution qui marche aussi ...
J'ai préféré rester sur l'évènement ColumnWidthChanged() qui permet à l'utilisateur tant qu'il maintient la souris de pouvoir modifier la largeur de la collonne, mais ensuite celle ci se redimensionne automatiquement.
Ce qui donne un truc du genre:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub lst_ColumnWidthChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ColumnWidthChangedEventArgs) Handles lst.ColumnWidthChanged Select Case e.ColumnIndex Case 1 lst.Columns(e.ColumnIndex).Width = 400 Case 2 lst.Columns(e.ColumnIndex).Width = 100 Case 3 lst.Columns(e.ColumnIndex).Width = 100 End Select End Sub
Mais,....
Ami...
Tu ne développes pas là en VB6 !!!!
Tu es en VB.Net !!!! :lol:
Ok desolé :oops: ma recherche sur le forum n'était pas assez sélective...
Mais au moins cela apporté des éléments de réponse, j'espère que totoche a maintenant la solution à son problème.