Creer en Runtime une ListBox avec multi-sélection

[Résolu]
Signaler
Messages postés
18
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
10 avril 2008
-
Messages postés
18
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
10 avril 2008
-
Bonjour,

Je souhaitre créer pendant l'exécution de mon programme une ListBox avec multi-sélection. Je mets donc dans une Form :

   Private Sub Form_Load()
       Dim L As ListBox
       Set L = Me.Controls.Add("vb.ListBox", "MyListObject")
       L.MultiSelect = 2
   End Sub

Mais j'ai l'erreur assez logique : Impossible d'affecter à une propriété en lecture seule...

Du coup, à quel moment puis-je indiquer que ma liste est en mode sélection multiple ?

En fait, mon problème est dans un UserControl, mais c'est plus simple de le mettre en évidence dans une Form.

Merci d'avance !

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
(J'ai changé la rubrique et effacé ta question qui se retrouvait en double)

Pour ta question : Ce n'est pas toujours possible :
Si certaines propriétés sont en lecture seule, c'est qu'il n'est pas prévu de les modifier en run-time (La Palice 1470-1525)
Il existe parfois certaines possibilités avec les APIs comme SendMessage d'y accéder, mais ce n'est pas un cas général et pas pour tous les contrôles.
La difficulté supplémentaire est que, quand tu utilises un User Control dans une application, le composant est déjà "vivant" même en mode création. Il devient donc impossible d'utiliser une ListBox dans un UserControl et de vouloir modifier certaines de ses propriétés au travers de propriétés maison, même en mode création de ton application.
Dans ton cas, c'est la même chose.
Hélas, je ne connais pas de solution ...

Ce que tu peux faire, c'est créer une ListBox avec la propriété MultiSelect et un Index 0, puis, quand tu as besoin d'en générer une, faire un
Load maListBox(1)
Ca te recopiera la ListBox d'origine dans une nouvelle avec l'index 1

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Bonjour,
Arf merci de bien respecter les catégories dans lesquelles vous postez ! C'est pas du VB.Net ce que tu nous donnes !

Voir http://www.vbfrance.com/codes/CREATION-DYNAMIQUE-OBJET-AVEC-GESTION-EVENEMENTS-VB6_40648.aspx

++
Messages postés
18
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
10 avril 2008

Effectivement, je me suis trompé de ligne en sélectionnant le forum, désolé !

Sinon, merci pour la réponse, mais je sais gérer les évenements de mes objets créés en runtime. Mon problème, c'est de modifier une propriété qui est modifiable uniquement à la création.

Enfin, je vais poster sur le bon forum cette fois, en précisant un peu mieux ma question
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Pour info, les seles commandes acceptées par une ListBox avec SendMessage sont listées ici :
http://msdn2.microsoft.com/en-gb/library/ms674461.aspx
et il n'y a rien qui parle de MultiSelect
Messages postés
18
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
10 avril 2008

Bonjour,

Tout d'abord, merci d'avoir transféré ma question.

Je ne savais pas qu'on pouvait cloner comme ça des objets indexé, c'est intéressant à savoir.

Dans mon cas, ça n'est malheureusement pas utile, parce que je n'ai besoin que d'une seule instance de ma liste. Je voulais la créer dynamiquement, parce que l'instance de mon usercontrol a rarement besoin de cette liste, et il y aura beaucoup d'instances simultanées de mon usercontrol, donc c'est un peu idiot de créer autant de liste qu'il y aura de usercontrol...

Enfin, si c'est la seule solution, il faudra bien que je m'y fasse !

En tout cas, merci pour ette réponse !