Array - ou List(of T) - à l'intérieur d'une classe

Jayme65 Messages postés 60 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 26 mars 2019 - 14 mai 2011 à 00:59
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 14 mai 2011 à 23:16
Bonjour,

Comment dois-je faire pour utiliser un array (ou List(of T)) à l'intérieur d'une classe, svp?

Le code suivant ne fonctionne pas:
Public Class Form1
 Dim prefUser As New Pref()

 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  prefUser.val = "false"
  prefUser.pos.Add("true")
  prefUser.pos.Add("false")
  prefUser.butt.Add("A1")
  prefUser.butt.Add("A2")
 End Sub

 Public Class Pref
  Public val As String
  Public pos As List(Of String)
  Public butt As List(Of String)
 End Class

End Class


Celui là non plus:

Public Class Form1
 
 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim prefUser As New Pref() With {.val "false", .pos(1) "true", .pos(2)="false", .buttons(1) = "button01", .buttons(2) = "button02")}
  End Sub

 Public Class Pref
  Public val As String
  Public pos(2) As String
  Public butt(2) As String
  End Class

End Class


Comment dois-je m'y prendre, svp? D'avance merci pour votre aide!
A voir également:

7 réponses

AlKatou Messages postés 95 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 28 novembre 2017
14 mai 2011 à 08:00
salut,

gardes ta 1ère solution, elle est bien plus souple que la 2ème. maintenant, le problème vient de tes listes que ne sont pas instanciées.

voici la nouvelle déclaration de ta classe :

 Public Class Pref
  Public val As String
  Public pos As New List(Of String)
  Public butt As New List(Of String)
 End Class


tu peux continuer à utiliser le code tel qu'il est dans ton Form_Load


bonne continuation, alKa
0
Jayme65 Messages postés 60 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 26 mars 2019 2
14 mai 2011 à 10:52
Merci alKa,
Merci pour ta solution...et pour ton conseil quant à la direction à choisir!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 mai 2011 à 12:22
Bonjour,

J'apporte quelques précisions :
Dim MaVariable As New Type(...)
et
Dim MaVariable as Type=New Type(...)

Sont différent, dans le premier cas, MaVariable ne sera jamais à Nothing, mais cela ralenti un peu le programme car à chaque fois il contrôle si la valeur est Nothing et si c'est le cas recréé l'objet.

Sinon, pour ton problème, qui semble plus être un problème de constructeur, voici une proposition (code à ajouter dans ta classe Pref) :
Public Sub New(Byval pVal as String,byval ptPos as string(), ByVal ptButt as string())
val =pVal
pos =new List(Of String)
pos.AddRange(ptPos)
butt=new List(Of String)
butt.AddRange(ptButt)
end sub


Ensuite, tu construit ton objet :
MonObjet=New Pref("Val",new String(){"Chaine1", "Chaine2"},New String(){"Butt1","Butt2"})

Auquel cas, la déclaration et l'assignation peuvent être séparées.

Il est d'usage d'éviter les variables exportées et de préférer les assigner par des propriété (mot clé Property), cela permet d'éviter des modifications hasardeuses.

Sache que les constructeurs paramétrés sont aussi utilisables avec les structures.

Sinon, dans ton exemple, tu mets les valeurs true et false, est-ce qu'un booléen serait plus adapté ?
As-tu vérifié que Option Strict était à On dans les propriétés de ton projet ?

Mon site
0
Jayme65 Messages postés 60 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 26 mars 2019 2
14 mai 2011 à 20:20
alKa, NHenry,

Puis-je encore profiter de vos lumière?
En fait, dans cette class Pref() je voudrais reprendre des boutons radio existants.
J'ai donc adapté la classe en fonction (du moins c'est ce que je pensais ;-)
Public Class Pref
    Public val As String
    Public pos As List(Of String)
    Public butt As List(Of RadioButton)
    Public Sub New(ByVal pVal As String, ByVal ptPos As String(), ByVal ptButt As RadioButton())
        val = pVal
        pos = New List(Of String)
        pos.AddRange(ptPos)
        butt = New List(Of RadioButton)
        butt.AddRange(ptButt)
    End Sub
End Class


Mais maintenant, comment dois-je faire pour faire 'rentrer' des boutons radio EXISTANTS?
J'ai essayé (vraiment comme un débutant que je suis)
Dim show_userroms As New Pref("false", New String() {"true", "false"}, {A1, A2})

(A1 et A2 sont les noms des RadioButton)

Mais sans résulat..pouvez vous m'aider svp?
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 mai 2011 à 20:27
Bonjour,

Si tu ne stocke que des booléens, préfères plutôt le type Boolean que String.

Ensuite, tu peux faire une fonction qui te donne l'index (dans une collection, List(of T), de Radiobutton) de l'élément sélectionné.

Et dans ce cas, le type de butt sera Integer et non string().

Mon site
0
Jayme65 Messages postés 60 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 26 mars 2019 2
14 mai 2011 à 21:45
Aurais tu par hasard, le temps/l'occasion d'adapter le script selon ce que tu me proposes..c'est un peu obscur pour moi!
D'avance je te remercie :)
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 mai 2011 à 23:16
Bonjour,

Public Class Pref
    Public val As Boolean
    Public pos As List(Of Boolean)
    Public butt As Integer
    Public Sub New(ByVal pVal As String, ByVal ptPos As String(), ByVal pButt As Integer)
        val = pVal
        pos = New List(Of Boolean)
        pos.AddRange(ptPos)
        butt=pButt
    End Sub
End Class

Public Class Form1
Dim prefUser As Pref

Dim lLstRadio as list(of RadioButton)=list(of RadioButton)

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
lLstRadio.AddRange(new RadioButton(){RadioButton1,RadioButton2,RadioButton3,RadioButton4,...})

prefUser=New Pref(false,new Boolean(){true,false},GetIndexSelected)
End Sub

Private Function GetIndexSelected() As Integer
For i As Integer=0 To lLstRadio.Count-1
If lLstRadio(i).Checked then Return i
Next
End Function

End Class


A adapter selon tes besoins.

Mon site
0
Rejoignez-nous