cs_Shucky
Messages postés7Date d'inscriptionsamedi 7 juin 2008StatutMembreDernière intervention 9 juin 2008
-
7 juin 2008 à 17:16
cs_Shucky
Messages postés7Date d'inscriptionsamedi 7 juin 2008StatutMembreDernière intervention 9 juin 2008
-
9 juin 2008 à 13:51
Bonjour à tous,
Tout d'abord j'espere avoir bien choisi le thème du sujet si ce n'est pas le cas je tien à m'en excuser.
Je sollicite votre aide aujourd'hui car malgré mes recherches je ne trouve pas de réponses à ma question. J'ai un programme à faire un VB un window application j'ai donc :
Ma class form1 qui contient tout le code concernent les événements sur les boutons et autre et ma class perso voilà à quoi cela ressemble
Public Class Form1
'Mon code...
End Class
Public Class Liste
'Mon code
End Class
Jusque là tous va bien mais je doit faire de façon que ma fonction liste gère aussi bien les Char, Integer ou String donc j'ai rajouté (Of ElementType) dans la déclaration de ma liste.
Je viens vers vous maintenant car lorsque j'appel ma liste dans ma Public Class Form1 cela me pose problème. Voici ce que j'ai besoin de faire
Public Class Form1
Tableau_de_Liste(taille) As Liste(?????)
End Class
Public Class Liste (of ElementType)
'Mon code...
End Class
En l'endroit des "????" je ne sais pas quoi mettre. En effet j'ai besoin d'un tableau qui me stock des listes aussi bien d'integer que de char ou string.
Est-ce que cela est possible au moins? Si oui comment faire? Si non comment contourner cette contrainte?
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 8 juin 2008 à 02:50
Salut Shucky,
Si tu as des Char, Integer ou String à mettre dans ta liste, le type String pourrais faire l'affaire. Le problème, c'est que tu ne pourra plus savoir de quel type était ta valeur avant de l'ajouter à la liste, car toute seront convertie en String. Par contre, si tu stoque tes valeurs sous forme d'Object, tu pourra le faire:
Private Liste As New List(Of Object)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cs_Shucky
Messages postés7Date d'inscriptionsamedi 7 juin 2008StatutMembreDernière intervention 9 juin 2008 8 juin 2008 à 10:50
Bonjour,
En fait j'ai une combobox ou l'utilisateur choisi le type qu'il veux. J'ai déjà pensé au String mais notre prof veux qu'on fasse la différence entre les types.
J'ai aussi pensé a faire comme tu as dit
Dim Liste_liste(taille) As Liste(Of Objet) mais après ce bout de code me pause problème
Select Case ComboBox1.Text
Case "Integer"
Liste_liste(nombre_de_liste) = New Liste(Of Integer)
Case "Char"
Liste_liste(nombre_de_liste) = New Liste(Of Char)
Case "String"
Liste_liste(nombre_de_liste) = New Liste(Of String)
End Select
Mais après ça me dit qu'il ne peut pas converti Integer, Char ou String en Systeme Object
cs_Shucky
Messages postés7Date d'inscriptionsamedi 7 juin 2008StatutMembreDernière intervention 9 juin 2008 8 juin 2008 à 17:21
en fait je dois créer une class liste qui peut être de plusieurs type (type choisi par l'utilisateur).
C'est pour quoi je dois faire une Public Class Liste(Of elementType)
Donc j'ai une class Liste et une seul qui prend le type choisi par l'utilisateur
Maintenant dans mon code principale je dois géré plusieurs Listes, mais je dois les gérer peut importe leurs types, c'est pour quoi je souhaite les stocker dans un tableau
J'espère avoir était clair
Merci de tes réponses
Shucky
Vous n’avez pas trouvé la réponse que vous recherchez ?
<hr size="2" width="100%" />
Si tu veux plutôt créer des listes contenant 1 seul type de donées, mais en avoir plusieurs (chacune stoquant des types différents) :
Dim Tab_List(2) As IList
Tab_List(0) = New List(Of String)
Tab_List(1) = New List(Of Integer)
Tab_List(2) = New List(Of Char)
Tu pourra donc ajouter des String à la liste Tab_List(0), des Integer à la liste Tab_List(1) et des Char à la liste Tab_List(2) :
' Si tu essai d'ajouter un autre type qu'un String à Tab_List(0), tu aura une erreur
Tab_List(0).Add([String])
Tab_List(0).Add([String2])
' Si tu essai d'ajouter un autre type qu'un Integer à Tab_List(1), tu aura une erreur
' Si tu essai d'ajouter un autre type qu'un Char à Tab_List(2), tu aura une erreur
Tab_List(2).Add([Char])
Tab_List(2).Add([Char2])
<hr size="2" width="100%" />
Tu peux stoquer tes classes Liste sous forme de IList seulement si celle-ci implémentent IList (par exemple si elle sont dérivé de List)
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 8 juin 2008 à 18:48
OK
Tout d'abord, une liste "normal" dans .NET est une List(Of ...). Celle-ci impléments l'interface IList, cela te permet de stocker des listes de types différents en IList.
Donc si on résume, tu veux créer différents type de listes (liste d'integer, de string...) que tu veux stocker dans une même classe.
Autrement dit, c'est une liste de listes de différents types:
' La liste contenant les différents types de liste:
Private Lists As New List(Of IList)
' Ajout de nouveaux types de listes (liste de String et d'Integer dans ce cas):
Lists.Add(New List(Of String))
Lists.Add(New List(Of Integer))
' Ajout de nouveaux éléments aux listes. La 1ère liste est une liste de String :
Lists(0).Add("Salut")
Lists(0).Add("Bonjour")
' La 2ème liste est une liste d'Integer :
Lists(1).Add(13)
Lists(1).Add(481)
' Tu peux aussi recréer ta liste original pour faciliter sa manipulation:
Dim myStringList As List(Of String) = Lists(0)
myStringList.Add("Resalut")
myStringList.Add("ReBonjour")
' Identification du type des listes et affichage de leur contenu :
For Each List As IList In Lists
If TypeOf (List) Is List(Of String) Then
Console.WriteLine("Ceci est une liste de String, voici sont contenu:")
For Each Value As String In List
Console.WriteLine(Value)
Next
ElseIf TypeOf (List) Is List(Of Integer) Then
Console.WriteLine("Ceci est une liste de Integer")
For Each Value As Integer In List
Console.WriteLine(Value)
Next
ElseIf TypeOf (List) Is List(Of Char) Then
Console.WriteLine("Ceci est une liste de Char")
For Each Value As Char In List
Console.WriteLine(Value)
Next
EndIf
Next
' Cela t'affiche:
' Ceci est une liste de String :
' Salut
' Bonjour
' Resalut
' ReBonjour
' Ceci est une liste de Integer :
' 13
' 481
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 8 juin 2008 à 20:40
OK, si tu dois toi même gérer tes tableaux, c'est sûr que ca va compliquer les choses. Une Liste dans VB n'est rien d'autre qu'une classe gérant un tableau (la liste change la taille du tableau conteneur de façon dynamique lorsque tu ajoute ou supprime des éléments). Le plus simple est donc de créer ta classe Liste toi même (comme tu l'a fais).
Mais c'est quoi l'idée? De ne pas utiliser les classes du framework en dehors de Array?
As-tu le droit d'utiliser les interfaces? (qui te permettront de créer une liste compatible avec les autre listes .NET)
Voilà la même chose avec des tableaux à la place des listes:
' Tableau de 'Array' (il contiendra d'autres tableaux)
Private Lists(-1) As Array
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Ajout d'un tableau de String à la liste de tableau:
Dim NewStringTab(-1) As String
Array.Resize(Lists, Lists.Length + 1)
Lists(Lists.Length - 1) = NewStringTab
' Ajout d'un tableau d'Integer à la la liste de tableau:
Dim NewIntegerTab(-1) As Integer
Array.Resize(Lists, Lists.Length + 1)
Lists(Lists.Length - 1) = NewIntegerTab
' Ajout de nouveaux éléments aux tableaux. Le 1er tableau contient des String :
Dim myStringTab() As String = Lists(0)
Array.Resize(myStringTab, myStringTab.Length + 2)
myStringTab(myStringTab.Length - 2) = "Salut"
myStringTab(myStringTab.Length - 1) = "Bonjour"
Array.Resize(myStringTab, myStringTab.Length + 2)
myStringTab(myStringTab.Length - 2) = "Hello"
myStringTab(myStringTab.Length - 1) = "Coucou"
Lists(0) = myStringTab
' le 2ème tableau contient des Integer :
Dim myIntegerTab() As Integer = Lists(1)
Array.Resize(myIntegerTab, myIntegerTab.Length + 2)
myIntegerTab(myIntegerTab.Length - 2) = 13
myIntegerTab(myIntegerTab.Length - 1) = 481
Lists(1) = myIntegerTab
' Identification du type des listes et affichage de leur contenu :
For Each Tab As Array In Lists
If TypeOf (Tab) Is String() Then
Console.WriteLine("Ceci est un tableau de String :")
For Each Value As String In Tab
Console.WriteLine(Value)
Next
ElseIf TypeOf (Tab) Is Integer() Then
Console.WriteLine("Ceci est un tableau d'Integer :")
For Each Value As Integer In Tab
Console.WriteLine(Value)
Next
ElseIf TypeOf (Tab) Is Char() Then
Console.WriteLine("Ceci est un tableau de Char :")
For Each Value As Char In Tab
Console.WriteLine(Value)
Next
End If
Next
End Sub
Ceci est un tableau de String :
Salut
Bonjour
Hello
Coucou
Ceci est un tableau d'Integer :
13
481