Création d'une collection de contrôles dynamique [Résolu]

BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 3 juin 2012 à 10:36 - Dernière réponse : BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 3 juin 2012 à 14:07
3
Merci
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.

Merci BasicZx81 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de BasicZx81
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 3 juin 2012 à 13:14
0
Merci
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.
Commenter la réponse de ehjoe
NHenry 14281 Messages postés vendredi 14 mars 2003Date d'inscription 23 octobre 2018 Dernière intervention - 3 juin 2012 à 13:17
0
Merci
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
Commenter la réponse de NHenry
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 3 juin 2012 à 13:52
0
Merci
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.
Commenter la réponse de ehjoe

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.