IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Tableau de composants lors du design


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Tableau de composants lors du design
    Je ne trouve pas (je ne vois même pas quels mots clefs donner... ils n'aboutissent pas exactement où je le souhaite) comment faire ceci :

    Je crée une fenêtre avec des boutons ou des textbox.
    16 de chaque.
    je fais du copier/coller
    Je ne souhaite pas qu'ils se nomment Button1/Button2/button3...
    mais je voudrais qu'ils soient un tableau pour y faire appel de manière plus pratique :
    Button(1)/(Button(2)/Button(3)...

    sous VB6 je voyais la propriété Index (pour indiquer les 1, 2, 3...) mais pas là !
    Quand je place directement dans le nom Button(1), VB me jette...
    Comment faites-vous cela ?
    Merci !!
    (NB : je ne cherche pas de solutions "dynamiques" pendant que le logiciel tourne)

    Ben.

  2. #2
    Membre averti Avatar de The_Big_Lebowski
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 225
    Points : 304
    Points
    304
    Par défaut
    J'ai bien peur qu'il faille que tu te les saisisses à la main
    La notions de "groupe de contrôles" telle que la connait VB6 n'existe pas dans .NET.

    Pourquoi ne pas les créer dynamiquement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      Dim bt As Button
            For i As Integer = 1 To 16
                bt = New Button
                bt.Text = "Bouton (" & i.ToString & ")"
                bt.Tag = i.ToString
                'une petite pirouette
                bt.Top = i * 22
                AddHandler bt.Click, AddressOf bouton_Click
                Me.Controls.Add(bt)
            Next
     
        Private Sub bouton_Click(sender As Button, e As EventArgs)
            MsgBox(sender.Text)
        End Sub

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ha nnaaann !
    J'espèrais une réponse plus positive ! Je l'avoue. Mais c'est aussi ce que je craignais.

    Mais c'est... tout bêtement étonnant que ce ne soit pas possible !
    - D'abord par ce que cela se faisait dans la version VB6
    - Ensuite par ce que c'est utile (comment passer des infos de manière intelligentes à différents composants ??)
    - Et enfin c'est imaginable en dynamique (de manière bien plus complexe alors que cela aurait été si simple en design !)

    pfff... je trouve cela un peu mal pensé. Je suis déçu.

    merci pour cette réponse et pour le morceau de code en tout cas !
    (bien sûr si quelqu'un d'autre à une idée de faisabilité, je suis preneur)
    Ben.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Citation Envoyé par BenVB Voir le message
    - Ensuite par ce que c'est utile (comment passer des infos de manière intelligentes à différents composants ??)
    Tu peux parcourir la collection controls pour les boutons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub btnStyle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStyle.Click
            For Each btn In Me.Controls.OfType(Of Button)()
                btn.FlatStyle = FlatStyle.Flat
            Next
        End Sub
    Tu peux (par code) placer tes boutons dans une liste (pour cibler certains) que tu parcours ensuite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim ListBtn As List(Of Button) = New List(Of Button)
     
        Private Sub frmBoutons_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                ListBtn.Add(btnFlat)
                ListBtn.Add(btnPopUp)
                ListBtn.Add(btnPopUp)
        End Sub
     
        Private Sub btnStyle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStyle.Click
            For Each btn In ListBtn
                btn.FlatStyle = FlatStyle.Popup
            Next
        End Sub
    Des parcours de contrôles avec accés spécifique et parcours des conteneurs enfants (exemple non exhaustif)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        Sub VideTexte(ByVal conteneur As Control)
            For Each ctrl As Control In conteneur.Controls
                'select sur true (condition vrai), qui sera vérifié sur chaque case si "ctrl" correspond au type de controle 
                Select Case True
                    Case (TypeOf ctrl Is Panel), (TypeOf ctrl Is GroupBox)
                        VideTexte(ctrl)
                    Case TypeOf ctrl Is TextBox
                        DirectCast(ctrl, TextBox).Text = ""
                    Case TypeOf ctrl Is ComboBox
                        DirectCast(ctrl, ComboBox).Text = ""
                    Case TypeOf ctrl Is ListBox
                        ' replace ctrl dans son type de contrôle précis (ici ListBox) pour accéder aux méthodes spécifiques aux ListBox
                        DirectCast(ctrl, ListBox).ClearSelected()
                End Select
            Next
        End Sub
    Et surement d'autres possibilités suvant les besoins.

    [pour info] Après tu peux aussi utiliser un dictionaire pour les référencer de manière unique (quel que soient les noms des boutons, mais qui seront tous différents)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Dim dicoBtnInt As Dictionary(Of Integer, Button) = New Dictionary(Of Integer, Button)
    Après avoir alimenté ton dico tu pourra faire dicoBtnInt(indice) mais si c'est pour reproduire du vb6 cela n'est pas conseillé il vaut mieux prendre l'habitude de .net et utiliser ces capacités.
    [/pour info]

    Pour résumer, les collections remplacent avantageusement les tableaux.

    Consulte des tutos et MSDN pour connaître leurs fonctionalités.

    [Edit]
    Cours
    Il y a aussi LINQ qui peut être utilisé voir Exemple sur autre sujet qui permet de cibler sur des caractèristiques.
    [/Edit]
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Avec ma dernière réponse (linq)

    Tu peux en design mettre 1 dans le tag de tes 16 boutons.
    et (adapté de l'exemple donné dans le lien sur linq)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        ' activer ou désactiver les boutons
        Sub boutonsActifs(ByVal Actif As Boolean)
            For Each b As Button In (From btn In Me.Controls.OfType(Of Button)() Where btn.Tag = 1 Select btn)
                b.Enabled = actif
            Next
        End Sub
    si tes boutons sont groupés dans un groupbox (conseillé) par exemple, remplacer "me" par "GroupBox1", mais dans ce cas il est aussi simple de parcourir la collection controls du GoupBox.

    C'est pour te donner des idées et des pistes.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par BenVB Voir le message
    - D'abord par ce que cela se faisait dans la version VB6
    vb6 et vb.net n'ont rien à voir

    Citation Envoyé par BenVB Voir le message
    - Ensuite par ce que c'est utile (comment passer des infos de manière intelligentes à différents composants ??)
    c'était utile en vb6, quand on connait vb.net ca ne l'est pas, il y a bien mieux
    pas lu la réponse de rv26t mais il doit y avoir ce qu'il faut dedans

    Citation Envoyé par BenVB Voir le message
    - Et enfin c'est imaginable en dynamique (de manière bien plus complexe alors que cela aurait été si simple en design !)
    poser plusieurs dizaines de controles à la main ce n'est pas plus rapide

    Citation Envoyé par BenVB Voir le message
    je trouve cela un peu mal pensé. Je suis déçu.
    c'est le temps d'apprendre, .net est plus pensé que tu ne le penses ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti Avatar de The_Big_Lebowski
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 225
    Points : 304
    Points
    304
    Par défaut
    Une autre solution...

    ... continuer de développer en VB6.

  8. #8
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour The_Big_Lebowski

    Comme dit par pol63,vb6 a ete serieusement lifte avec vb.net et tu as interet à migrer....vb6 c'est anti-deluvien...

    Tu veux travailler travailler avec des boutons ou quel que soit le control(textbox,label) tu as la solution à vue en vb.net avec la collection Controls:
    -disponible dans pratiqument tous les controls...
    -mieux qu'un tableau car elle supporte la recherche par cle( Name),position(index), et le tri...

    exemple de 4 buttons droppes sur un form mais ca aurait pu etre un panel ou un user control :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Public Class Form3
     
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            For Each btn As Button In Me.Controls
                AddHandler btn.Click, AddressOf Button_Click
            Next
        End Sub
        Private Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs)
     
            Dim btn As Button = CType(sender, Button)
            MessageBox.Show(Me.Controls.IndexOf(btn))
            Select Case Me.Controls.IndexOf(btn)
                Case 0
                    MessageBox.Show(btn.Name)
                Case 1
                    MessageBox.Show(btn.Name)
                Case 2
                    MessageBox.Show(btn.Name)
                Case 4
                    MessageBox.Show(btn.Name)
            End Select
        End Sub
     
     
    End Class
    vb6 ne peut indexer que certains controls et il est vrament ringard ....
    Beaucoup de choses lui manquent....gdi n'existe pas...

    bon code...

Discussions similaires

  1. Création de Tableau de Composant Graphique
    Par vincentRO dans le forum Graphisme
    Réponses: 2
    Dernier message: 18/05/2007, 23h50
  2. probleme affichage composant lors de l'ouverture
    Par argon dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 27/04/2007, 11h11
  3. [Visual Web] Code source JSP généré lors du design
    Par tomagold dans le forum NetBeans
    Réponses: 2
    Dernier message: 22/03/2007, 00h26
  4. Eviter la coupure d'un tableau en deux lors d'une impression
    Par zidrouz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 15/06/2006, 11h26
  5. Tableau de composant
    Par leycho dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/12/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo