Comment faire un Control Array en vb.net sans ajouter de composant.

XGuarden Messages postés 259 Date d'inscription dimanche 14 juillet 2002 Statut Membre Dernière intervention 17 août 2012 - 2 févr. 2006 à 06:02
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 27 sept. 2007 à 21:15
Je suis en trein de faire un programme de réservations de spactacles en vb.net 2003.



dans un datagrid, j'ai la liste des sièges réservés pour une représentation.

À l'écran, j'ai la liste des sièges pour cette représentation sous forme de Labels.

Ce qui me donne 60 contrôles sur ma forme(Label).



Au chargement de la fenêtre, mon programme regarde doit le datagrid et doit désactiver les sièges corespondant.



Étant donnée que mes sieges on leur numéro comme text, je peux vérifier
s'il sagit du bon siège grâce à cette propriété. Le code:



Private Sub SelectionnerHeureSalle2()

Dim daTable As New OleDb.OleDbDataAdapter

Dim dtTable As New DataTable

Dim requete As String



requete = " " & _

"Select res.nosiege " & _

"FROM reservation res, " & _

"representation rep, " & _

"spectacle spe " & _

"WHERE res.norep = rep.norep " & _

"AND spe.nospec=rep.nospec " & _

"AND spe.nomspec = '" & cmbRepresentation.Text & "' " & _

"AND rep.daterep = #" & dtpDateTime.Text & "# " & _

"AND rep.heuredebutrep = '" & cmbSelectionHeure2.Text & "' "



Try

cmbSelectionHeure1.Text = Nothing

grpSalle1.Visible = False



OuvrirDB()

dtTable.Clear()


daTable.SelectCommand = New OleDb.OleDbCommand(requete, Connexion)



daTable.Fill(dtTable)

Dim x As Integer

Dim NombreLigne As Integer = dtTable.Rows.Count - 1



If NombreLigne <> -1 Then

Dim control As New Control



RendreSiegeDisponible(2)



For x = 0 To NombreLigne


For Each control In Me.grpSalle2.Controls


If TypeOf (control) Is Label Then


If control.Text = String.Concat(dtTable.Rows(x).Item(0)) Then


control.Enabled = False


End If


End If

Next control

Next



FermerDB()



End If



grpSalle2.Visible = True



Catch Er As Exception

MsgBox(Er.Message())

End Try

End Sub



Private Sub RendreSiegeDisponible(ByVal Salle As Integer)

Dim control As New Control

Dim x As Integer



If Salle = 1 Then

For x = 0 To 60


For Each control In Me.grpSalle1.Controls


If TypeOf (control) Is Label Then


control.Enabled = True

End If

Next control

Next

End If



If Salle = 1 Then

For x = 0 To 60


For Each control In Me.grpSalle2.Controls


If TypeOf (control) Is Label Then


control.Enabled = True

End If

Next control

Next

End If



End Sub









Comme vous pouvez le voir, ces dégueulasse!!!

En vb6, tout ce code aurait été bien plus simple:



For x = 0 To NombreLigne

MonLabel(dtTable.Rows(x).Item(0)).enabled = false

next x



Malheureusement, je n'arrive pas à "Guérir" mon code.



Merci d'avance pour votre aide. =:0)

5 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 févr. 2006 à 08:25
Salut

Les controls array existent toujours en dotnet.
Il faut pour cela importer le controle labelArray

voila un article sur son utilisation
http://visualbasic.about.com/od/usingvbnet/l/bldykctrlarray2.htm

Mais je te conseilles une autre méthode.

C'est de crée sur une arraylist par salle
soit une hashtable par table et ensuite tu ajoutes
les contôles dans la collection

Et ensuite par l'index tu peux enablé le controle

Ex
l as label
if salle(index) is label then
directcast(salle(index),label).enabled = false
end if

c'est plus performant
il y a une boucle au départ pour remplir la collection et ensuite c'est qu'un acces.


voila.
0
XGuarden Messages postés 259 Date d'inscription dimanche 14 juillet 2002 Statut Membre Dernière intervention 17 août 2012
2 févr. 2006 à 17:16
J'ai essayer avec une classe qui resemble à sa et sa ne marche pas...



Public Class ControlArrayExample



Public _mycollection As System.Collections.ArrayList = New System.Collections.ArrayList



Public ReadOnly Property Count() As Integer

Get

If (Not _mycollection Is Nothing) Then

Return _mycollection.Count

End If

Return 0

End Get

End Property



Public ReadOnly Property Item(ByVal Index As Integer) As Label

Get

If (Index > 0) And (Index <= Me.Count) Then


Return CType(_mycollection.Item(Index - 1), Label)

End If

Return Nothing

End Get

End Property





Public Sub AddItem(ByRef ValueIn As Label)



If (Not _mycollection Is Nothing) Then

_mycollection.Add(ValueIn)

End If



End Sub



Public Class Widget



Private _myName As String



Public Property Name() As String

Get

Return _myName

End Get

Set(ByVal Value As String)

_myName = Value

End Set

End Property



Public Sub New()



End Sub

Public Sub New(ByVal NameIn As String)

Me.Name = NameIn

End Sub



End Class



End Class





J'ai quelque difficulté à l'utiliser correctement
0
XGuarden Messages postés 259 Date d'inscription dimanche 14 juillet 2002 Statut Membre Dernière intervention 17 août 2012
2 févr. 2006 à 17:20
Sa marche =:0)
0
dala3e Messages postés 1 Date d'inscription mercredi 2 août 2006 Statut Membre Dernière intervention 27 septembre 2007
27 sept. 2007 à 16:01
JE VEUX UTILISER DES FLASH 0 MON APPLICATION EN VB.NET COMMENT FAIRE??????
0

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

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
27 sept. 2007 à 21:15
Salut

Que veux-tu faire?

Mettre un flash dans une appli web .net?
Premierement, il est conseillé de faire un nouveau post plutot que de compléter des anciens post surtout si le sujet est totalement different??

http://www.flash-control.net/fr/

Bon courage
0
Rejoignez-nous