Création d'une collection de contrôles dynamique

Résolu
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 3 juin 2012 à 10:36
BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013 - 3 juin 2012 à 14:07
Bonjour à tous,
J'aimerais créer une collection de contrôles : System.Diagnostics.Stopwatch
Je sais utiliser un StopWatch simplement comme dans le code ci-dessous mais comment créer une collection de ces contrôles et manipuler ensuite le bon contrôle (avec un numéro d'index ou autre) du Syle : StopWatch(0).Start et StopWatch(0).Stop. Ce système me permettre d'afficher le temps d'exécution de chaque procédure, ces procédures pouvant appeler d'autres procédures je n'ai pas d'autres choix que les gérer dynamiquement.

Dim Stopwatch As System.Diagnostics.Stopwatch
    Private Sub Watching(ByVal Value As String)
        If Value = "Start" Then
            ' Initialisation : debut de la mesure
            Stopwatch.Start()
        ElseIf Value = "Stop" Then
            ' fin de la mesure
            Stopwatch.Stop()

            ' Affichage de la mesure
            Console.WriteLine(Stopwatch.Elapsed().TotalMilliseconds & " millisecondes")
            Console.ReadKey()
        End If
    End Sub 


Merci beaucoup si vous pouvez m'aider.

4 réponses

BasicZx81 Messages postés 140 Date d'inscription samedi 5 mars 2011 Statut Membre Dernière intervention 13 août 2013
3 juin 2012 à 14:07
J'ai essayé avec un Dictionary :
        Dim dico As New System.Collections.Generic.Dictionary(Of String, Stopwatch)

        dico.Add("tel nom", New Stopwatch)
        dico("tel nom").Start()
        For i = 0 To 100000 : Next i
        dico("tel nom").Stop()
        MsgBox(dico("tel nom").Elapsed.TotalMilliseconds)


Je passe en résolu, je pense que ça devrait fonctionner.
3
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
3 juin 2012 à 13:52
Suite, si jamais dynamique c'était "logique", exemple :


' OBJETS LOGIQUES
' Objet unique avec évènement
Public Class Form1
Dim WithEvents cb As New ComboBox ' objet avec évènement
Dim WithEvents tb As New TextBox
Sub Form1_Load(...
Controls.AddRange(New System.Windows.Forms.Control() {cb, tb})
' Met les objets sur la form
Sub cb_Click(...) Handles cb.Click
Sub tb_Click(...) Handles tb.Click
' utilisation
cb.Items.Add(x)
tb.text = x

'Objet en collection avec évènement
Dim WithEvents b As Button ' pour un bouton
Dim listeBoutons As List(Of Button) = New List(Of Button) ' mise en collection

Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
MyBase.Load
For j As Integer = 0 To 2 ' nombre d'obj bouton
Me.b = New Button
Me.listeBoutons.Add(b)
Next
Me.listeBoutons.Item(0).Top = 10 ' dialogue avec un des objets
Me.listeBoutons.Item(0).Text = "gris Vertical"
Me.listeBoutons.Item(1).Top = Me.listeBoutons.Item(0).Top + 30
Me.listeBoutons.Item(1).Text = "gris Horizontal"
Me.listeBoutons.Item(2).Top = Me.listeBoutons.Item(1).Top + 30
Me.listeBoutons.Item(2).Text = "rouge Vertical"
For i As Integer = 0 To 2
Me.listeBoutons.Item(i).AutoSize = True
Me.listeBoutons.Item(i).Left = 10
Next i
Me.Left = 10
Me.Top = Me.Left
Me.Width = 450
Me.Height = 300
AddHandler Me.listeBoutons.Item(0).Click, AddressOf b_Click ' pour les évènements
AddHandler Me.listeBoutons.Item(1).Click, AddressOf b_Click
AddHandler Me.listeBoutons.Item(2).Click, AddressOf b_Click
For Each objBouton In listeBoutons ' ajout à la form
Me.Controls.Add(objBouton)
Next
End Sub
'
Sub b_Click(ByVal sender As Object, ByVal e As System.EventArgs) ' procédure CLICK
Dim btn As Button = CType(sender, Button) ' conversion en type "bouton"
MessageBox.Show("vous avec clique le bouton ..." & btn.Text) ' test
End Sub



Cordialement, Joe.
1
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
3 juin 2012 à 13:14
Bonjour BasicZx n ° 81


Dim obj As New Collection() ' GLOBALE DEBUTE A 1

' DANS LE LOAD par exemple
 obj.Add(ListBox1)' Mise en liste des objet physiques
 obj.Add(ListBox2)
 obj.Add(ListBox3)

' UTILISATION DANS UNE PROCEDURE
' obj n'a pas de numéro 
' rajout en fin nom de l'objet avec sa méthode évènementielle
Sub obj_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click, ListBox2.Click, ListBox3.Click
 Dim i As Integer
 For i = 1 To obj.Count
  If obj.Item(i).Name sender.Name Then MsgBox("index " & i)
 Next i
End Sub



Cordialement, Joe.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
3 juin 2012 à 13:17
Bonjour,

Pourquoi ne pas faire une collection générique de cette classe ?
List(Of System.Diagnostics.Stopwatch)
Et regardes le mot clé New.

Sinon, à la place de passer une chaine à ta Sub, regardes plutôt pour un Booléen (si 2 états) ou une énumération, ça limitera le risque de faute de frappe.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Rejoignez-nous