DLL LISTBOX ET COMBOBOX MULTI COLONNES

cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010 - 18 déc. 2003 à 01:59
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 - 22 févr. 2013 à 17:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18800-dll-listbox-et-combobox-multi-colonnes

guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
22 févr. 2013 à 17:06
@Labout : Bonne retraite, Si tu as une idée, n'hésites pas !
@PWM63, Merci pour cette solution, mais je ne me vois pas créer une database juste pour un enregistrement !

Pour le moment (vu que ça presse) je vais utiliser à contre coeur un DataGridView ...

Encore merci pour vos réponses.

Olivier
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
22 févr. 2013 à 16:04
Au temps pour moi.
Pour éviter de simplement te dire que je ne sais pas, je te propose de remplir manuellement 1 Datatable.

'en même temps que ton 2 :
Dim table As DataTable = New DataTable()
Dim colonne As DataColumn

colonne = New DataColumn()
colonne.DataType = System.Type.GetType("System.Int32")
colonne.ColumnName = "Colonne1"
table.Columns.Add(colonne)

colonne = New DataColumn()
colonne.DataType = Type.GetType("System.String")
colonne.ColumnName = "Colonne2"
table.Columns.Add(colonne)

'3
Dim row As DataRow

row = table.NewRow()
row("Colonne1") = Valeur1
row("Colonne2") = Valeur2
table.Rows.Add(row)

MultiComboBox1.DataSource = table
MultiComboBox1.DisplayMember = "Colonne1"
MultiComboBox1.ValueMember = "Colonne2"
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
22 févr. 2013 à 15:55
Désolé, je ne puis vous aider, j'ai cessé mon activité pour une retraite méritée.
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
22 févr. 2013 à 13:24
Bonjour PWM63,

Tout d'abord, merci pour ta réponse.

Si je ne me trompe pas, ceci est pour ajouter des colonnes ! non ?

Moi ce que je cherche à faire c'est :
1°) Créer une ListBoxMultiColonnes (FAIT)
2°) Ajouter 2 colonnes nommées Colonne1 et Colonne2 (FAIT)
3°) Ajouter 1 ligne avec les éléments Valeur1 et Valeur2 => Là je bloque !

Attention, je dois pouvoir ajouter d'autres éléments par la suite.

Si tu as trouvé comment faire cela sans passer par une bdd : je suis preneur.

Par avance merci

Olivier
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
22 févr. 2013 à 11:42
Erratum :
Bonjour Olivier,

Essaye ainsi :
ListBoxComboxMulticolonne.MultiComboBox1.Columns.Add(New ListBoxComboxMulticolonne.MultiComboBox.Column(Column_Width1, Column_Member1))
ListBoxComboxMulticolonne.MultiComboBox1.Columns.Add(New ListBoxComboxMulticolonne.MultiComboBox.Column(Column_Width2, Column_Member2))
guilleto Messages postés 256 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 20 mars 2013 1
22 févr. 2013 à 11:00
Bonjour à toutes et tous,

Est-ce que quelqu'un sait comment ajouter un élément 'manuellement' ?

J'ai essayé ceci :

Dim MonItem As Object = {{"NomColonne1", "Valeur 1"}, {"NomColonne2", "Valeur 2"}}
.Items.Add(MonItem)

Sachant que NomColonne1 et NomColonne2 sont les noms des 2 champs de mon contrôle !

Par avance merci

Olivier
newvicking Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 décembre 2010
8 avril 2009 à 11:02
En fait, si ça marche pour récupérer les colonnes de la ligne sélectionnée ;-)

Mais dans ma version de VB, il ne faut pas les "_" :

CType(CType(CType(MultiComboBox1.Items(iIndex), Object), System.Data.DataRowView).Row, System.Data.DataRow).ItemArray(1).ToString()
newvicking Messages postés 10 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 décembre 2010
7 avril 2009 à 18:24
Ca marche super bien avec Visual Sturio 2008.

Pour info, avec cette version, à la place MultiComboBox.ShowColumns True, il faut mettre MultiComboBox.DrawMode DrawMode.OwnerDrawFixed.

Par contre, je n'ai pas trouvé comment récupérer le contenu d'une colonne de la ligne sélectionnée dans la combobox ? (la méthode expliquée semble ne pas fonctionner avec cette version de VB).
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
21 oct. 2008 à 20:45
J'ai migré vers VB Express 2008, et j'utilise la dernière version de ta DLL pour multicombobox.
Cela fonctionne maitenant parfaitement !

Pour info, je fais ainsi :

Sub remplit_multicombobox(ByVal MultiComboBox As ListBoxComboxMulticolonne.MultiComboBox, ByVal DataSource As DataTable, ByVal DisplayMember As String, ByVal ValueMember As String, ByVal Columns() As structure_columns)

Dim DropDownWidth As Integer = 0

With MultiComboBox

.DataSource = DataSource 'Table
.DrawMode = DrawMode.OwnerDrawFixed
.DisplayMember = DisplayMember 'Champs affiché
.ValueMember = ValueMember 'Valeur du champs
.AspectLigneVerticale = ListBoxComboxMulticolonne.MultiComboBox.LargeurTrait.Fin
.HideColumnCle = True 'Clef cachée
.FormattingEnabled = True 'Aucune valeur par défaut
.SelectedValue = -1 'Aucune valeur par défaut

For Each Column As structure_columns In Columns 'Ajoute les colonnes

.Columns.Add(New ListBoxComboxMulticolonne.MultiComboBox.Column(Column.Width, Column.ColumnMember))
DropDownWidth += Column.Width

Next

.DropDownWidth = DropDownWidth 'Largeur

End With

End Sub
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
21 oct. 2008 à 18:42
et bien il suffit d'ouvrir la DLL avec VB2005 puis de la recompiler. La version 2005 était téléchargeable gratuitement chez microsoft
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
13 oct. 2008 à 10:25
Merci Labout,

Après aide, pour ce qui concerne le Combobox, il s'agirait de la propriété FormattingEnabled, disponible uniquement à partir du Framework 2.0.
Et je suis en VB .Net 2003 qui n'accepte que le Framework 1.x.

Bref, c'est pas gagné !

Merci tout de même pour ta source !

Stéphane
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
10 oct. 2008 à 18:09
c'est dans le code de la DLL DLL qu'il faut agir.
Mais ce n'est pas gagné car c'est prvu pour afficher
la valeur existante ou la première valeur quand il n'y en a pas.
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
10 oct. 2008 à 15:31
Bonjour,

Je suis en VB .net 2003.

Je souhaite afficher 1 MultiComboBox avec 2 colonnes "Code" et Signification", obtenir le résultat "Code" après avoir choisi 1 occurrence, et conserver la valeur "Numéro Auto".
Ces 3 champs sont dans 1 table d'1 dataset que je remplis via 1 fichier xml.

Pour l'instant, tout correspond à mon besoin, mais j'ai 1 petit soucis :
le contrôle affiche obligatoirement une valeur,
or, j'aimerai que la multicombobox reste vide tant que je n'ai encore rien sélectionné dans la liste.

J'ai essayé selectedvalue = nothing, "", 0 ou -1 ainsi que text="" mais rien n'y fait.

Existe-t-il 1 solution à mon problème ?

Par avance, merci.
Stéphane

PS : Ci-dessous un extrait du code :

With Me.MultiComboBox1

.DataSource = Me.DataTable1
.DisplayMember = "Code"
.ValueMember = "Numéro Auto"
.DropDownWidth = 700

.Columns.Add(New ListBoxComboxMulticolonne.MultiComboBox.Column(110, "Code"))
.Columns.Add(New ListBoxComboxMulticolonne.MultiComboBox.Column(590, "Signification"))

End With
Herleci Messages postés 15 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 15 février 2010
20 avril 2007 à 07:37
Bonjour comment faire pour remplir la multicolonneListBox avec un datareader, car je ne veux pas la lier à une table mais plutôt à ma requete voila mon code:
Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.jet.oledb.4.0;Data source=C:\Documents and Settings\Antonio\Mes documents\Visual Studio 2005\Projects\SGI\SGI\RemonteTerrain2K3.mdb")
'On crée une commande
'Une variable pour paramêtrer ma requête
Dim RefDiff As Integer
RefDiff = Form1.txtDiff.Text
Dim Mycommand1 As OleDbCommand = MyConnexion.CreateCommand()
Select Case RefDiff
Case Is = 1, 2

Mycommand1.CommandText = "select num_chaine, NOM_Chaîne,id_transpondeur from FormsChainePartranspondeur WHERE RefDiff like'" & RefDiff.ToString & "'"
Case Else

Mycommand1.CommandText = "select num_chaine, NOM_Chaîne,id_transpondeur from FormsChainePartranspondeur WHERE RefDiff <> 2"

End Select
MyConnexion.Open()
'on crée le datareader et on stocke chaque résultat dans listbox1
Dim Myreader1 As OleDbDataReader = Mycommand1.ExecuteReader()

A partir d'ici je ne sais pas comment on fait pour remplir la liste box
davidauche Messages postés 150 Date d'inscription jeudi 20 mars 2003 Statut Membre Dernière intervention 8 janvier 2008
18 avril 2007 à 10:58
LABOUT : il y a trois personnes au moins ont posé une question sur l'add des éléments
+1 (on attend une réponse)
Pas encore mater le code, mais je sens qu'il manque les Set pour items

Sinon, pourquoi tu ne hérite pas d'un listView (en mode list)? ça sera + simple pour les colums etc... (je suppose hein!)
sbaillamos2001 Messages postés 3 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 23 janvier 2007
13 avril 2007 à 19:05
salut tous le monde
j'ai besion d'un code qui me permet d'inserer un combobox multicolonnes en vb 6.0
merci d'avance
fredericmichel Messages postés 7 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 11 avril 2008
18 janv. 2007 à 14:11
Super ta combo multi-colonnes. Je trouve fou que Microsoft n'ait pas intégré cela dans ses combobox.
Par contre j'ai un petit soucis pour la remplir avec des données non récupérées dans une BDD. Je voudrais y rentrer les données à la main, j'y arrive avec une colonne, mais pas avec deux.
j'ai essayé items.add en passant un tableau et j'obtients à l'exécution "(collection)" dans la liste déroulante.
Peux tu m'aider ?
Merci d'avance.
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
26 nov. 2006 à 14:30
L'exemple de mon source traite ce cas.
Voic les 3 cas traités:
recordset fichier xml
recordset SQL Serves
recordset ACCESS
Robinwood01 Messages postés 153 Date d'inscription jeudi 25 avril 2002 Statut Membre Dernière intervention 3 juillet 2014
16 nov. 2006 à 17:11
Superbe source, d'ailleurs ce n'est pas la première que j'utilise.
Cependant je début en VB .NET, je voudrais charger une combo box multicolonne à l'aide d'un recordset ou au pire avec un .add mais je n'arrive pas avec le add à mettre plusieurs colonnes.


Merci d'avance
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
19 oct. 2006 à 15:28
merci
PWM63 Messages postés 127 Date d'inscription lundi 11 octobre 2004 Statut Membre Dernière intervention 18 mai 2016
13 oct. 2006 à 16:18
Je cherchais justement une Combobox multi colonnes, et elle est parfaite !
Je n'ai plus qu'à (comprendre comment) l'intégrer dans mon projet :)
En attendant, 10/10 !
cs_sidar Messages postés 3 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 29 avril 2006
28 avril 2006 à 19:00
Voila mon problème, j'utilise actuellement une listbox pour afficher les données d'un ARRAYLIST (mesVariables) qui pour chaque enregistrement contient 3 données (AdresseVariable , MnemoVariable et CommentaireVariable), ce qui donne le code suivant:
For Each maVar In EcranPrincipal.mesVariables
ListBox1.Items.Add(maVar.AdresseVariable & " " & _
maVar.MnemoVariable & " " & maVar.CommentaireVariable)
Next
Bon ça marche mais question alligement des colonnes, c'est pas terrible et je n'ais pas forcemment l'intention de calculer la longueur de chaque donnée pour ajuster mon nombre d'espaces.
J'ai donc récupéré la DLL et je suis confronté à un petit problème:
je réussi bien à créer mes trois colonnes, le nombre d'enregistrements correspond bien au nombre d'enregistrements de mon ARRAYLIST, mais je ne réussi pas à afficher correctement le contenu de chaque AdresseVariable , MnemoVariable et CommentaireVariable dans les lignes de la listbox multicolonne (j'ai dans les 3 colonnes le nom du namespace de mes variables pour chacun des 8000 enregistrements, ce qui ne m'avance pas beaucoup).
Voici le code que j'ai mis en place et qui donne ce résultat:
With MultiListBox1
.DataSource = EcranPrincipal.mesVariables
.Columns.Add(New ListBoxComboxMulticolonne.MultiListBox.Column(100, "AdresseVariable", "Adresse"))
.Columns.Add(New ListBoxComboxMulticolonne.MultiListBox.Column(100, "MnemoVariable", "Mnémo"))
.Columns.Add(New ListBoxComboxMulticolonne.MultiListBox.Column(200, "CommentaireVariable", "Commentaire"))
End With
Si quelqu'un peut me donner un coup de main, merci d'avance. Désolé si mes explications ne sont pas très claire, mes je ne suis qu'un informaticien amateur et je manque surement du bon vocabulaire pour être bien compris.
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
6 déc. 2005 à 19:10
sans doute, il faut essayer le code source est fourni
cs_dyka Messages postés 1 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 6 décembre 2005
6 déc. 2005 à 17:57
On se demande bien pourquoi ce n'est pas un contrôle standard du framework. En tout les cas, les contrôles fonctionnent très bien. J'ai juste une question : est-il possible de modifier la position de la dropdown list.
Par défaut, elle a la taille de la combobox, on peut l'élargir mais j'aimerais que le rectangle soit dessiner de l'autre côté. Est-ce possible ?
Merci pour les infos
Shivan0910 Messages postés 149 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 24 novembre 2010 2
19 déc. 2003 à 13:05
merci pour les infos
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
18 déc. 2003 à 20:14
Salut,

VB6 peut implementer des DLL COM, DCOM, COM+ ou d truc comme ça, basé sur l'ATL.
Une DLL .Net utilise une autre architecture donc pour pouvoir lire cette DLL tu dois le faire en utilisant le "bas niveau" avec tout une série de Declare Function tatata....
Donc très lourd à faire de plus tu doit t'assurer que la machine ou le programme est installé a le framework...
Je ne connais pas les fonctions pour implementer la DLL mais elle doivent, en principe, se trouver sur le site microsoft

A+
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
18 déc. 2003 à 15:39
Non hélas pour toi, j'ai essayé de l'ajouter en référence dans VB6 mais cela plante. Les Dll .NET ne semblent pas utilisables en VB6.
Pose la question sur le forum car je ne sais pas.
Salut et désolé.
Shivan0910 Messages postés 149 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 24 novembre 2010 2
18 déc. 2003 à 14:40
mais le fait que ce soit une dll ne le rend pas exploitable sous vb6 ??
qu'est ce qu'il faudrait pour que ca marche sur vb6 ???
en tout cas toujours super bien !!
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
18 déc. 2003 à 09:17
Merci,
Parceque VB.NET est appelé à remplacer VB. C'est un produit plus stable et qui offre beaucoup plus de possibilités. En conséquence je n'y investit plus de temps.
cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010
18 déc. 2003 à 01:59
Excellente idée ... dommage que cette source soit une fois de plus
une source .NET . Mais pourquoi toutes les meilleures choses se
trouvent que en .NET :(( (j'ai démaré VB6 y a environ 6 mois)

Sinon, sur le principe je mets 9/10 (et oui je ne peux pas tester)
Si il y a une identique en VB6, je suis prenneur ;)
Rejoignez-nous