none
valeur D'index RRS feed

  • Question

  • dans cette version de visual comment fait ton pour crée un groupe nommé grace à un numéro indiquer dans la valeur index de l'objet

    avant je mettais 0 dans cette valeur puis dans le code je pouvait en crée à volonté grace à la methode load

    exemple pour un TextBox
    for i=1 to 6
      load txtExemple(i)
      txtExemple(i).move txtExemple(i-1).Left+35 ,txtExemple(0).Top
      txtExemple(i).visible=True
    next i

    et au niveau évenement en plus des variables normales fourni dans la Sub il y avait Index pour différencier l'objet qui produit l'événement

    la pas moyen de trouver cette propriété
    • Déplacé Alex Petrescu vendredi 5 mars 2010 08:47 (Origine :Visual Studio - Commentaires et suggestions)
    mercredi 3 mars 2010 17:03

Réponses

  • Bonjour,

     

    VB.NET ne fournit plus la possibilité de créer des tableaux de contrôles comme Visual Basic 6.0, avec copier/coller et index. En revanche, vous pouvez créer un tableau de contrôles en utilisant System.Collections.ColletionBase. Je vous conseille de lire l’article MSDN sur la création de tableaux de contrôles.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Audrey PETIT lundi 8 mars 2010 12:45
    vendredi 5 mars 2010 08:59
  • Bonjour,

     

    Je ne comprends le problème avec les évènements. Pourquoi voulez-vous traiter toutes les évènements d’un bouton ? Normalement, on n’a pas besoin d’utiliser toutes les évènements, l’évènement Click est suffisant.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse FifiCalin lundi 15 mars 2010 21:16
    lundi 8 mars 2010 11:01
  • Re, une question pour réponse j'adore :) alors je vais commencer par répondre par la tienne.

    Il m'arrive souvent d'utiliser plusieur sub événement d'un controle selon les besoin du programme, par exemple pour un groupe de TextBox ,il arrive que dans certain TextBox on entre souvent la même valeur, donc pour simplifier la saisie on met cette valeur dans la propièté Text
    Pour ne pas avoir à se servir de la souris, on règle la propièté TabStop de chaque controle du groupe sur True et pour les autres controle de la feuille comportant cette proprièté sur False. On prend soin de classé la proprièté TabIndex de chaque controle du groupe de façon que la tabulation se fasse de façon cohérrante par rapport à l'agencement des controles.
    Seulement il se peut que l'on ai besoin de saisir une autre valeur dans le controle, pour ne pas avoir à éffacer la valeur déclaré dans la propièté Text je me sers de ces quelques lignes

    Private Sub txtVal_GotFocus(Index As Integer)
       txtVal(Index).SelStart = 0
       txtVal(Index).SelLength = Len(txtVal(Index).Text)
    End Sub

    Qui permette de selectionner la totalité du texte du controle sur le quel je viens de me déplacer grace à la tabulation, si je veus le conserver je tape [Tab] pour passer au controle suivant, si je veus l'effacer pour entrer une valeur différente la première frappe l'éffacera, si je veus juste modifier une partie du texte je tape [Fin] et j'effectue la modification.

    Voila, d'ailleur si les controles on plusieur événement se n'est pas par hasard, si l'on avait juste l'événement Click c'est comme si on avait un panneau qu'avec des intérrupteur pour allumer des ampoules

    Sinon pour mon problème, j'ai bien exécuté chaque chapitre de l'aide et fait tout comme ils ont dit mais cela ne fonctionne pas à cause de la ligne que j'ai cité dans mon post précédent, donc sois il y une erreur dans l'aide, sois c'est moi qui est fait une erreur

    si c'est moi c'est peut être qu'il faut une déclaration particulière au niveau de Class ButtonArray de façon à faire le lien avec la déclaratrion dans Form1 de Dim MyControlArray As ButtonArray.

    Car si on place la ligne MyControlArray = New ButtonArray(Me) dans Class ButtonArray cela provoque une erreur puisque Class ButtonArray ne connait pas la variable MyControlArray déclaré dans Form1
    • Marqué comme réponse FifiCalin lundi 15 mars 2010 21:16
    lundi 8 mars 2010 23:01

Toutes les réponses

  • Bonjour,

     

    VB.NET ne fournit plus la possibilité de créer des tableaux de contrôles comme Visual Basic 6.0, avec copier/coller et index. En revanche, vous pouvez créer un tableau de contrôles en utilisant System.Collections.ColletionBase. Je vous conseille de lire l’article MSDN sur la création de tableaux de contrôles.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Audrey PETIT lundi 8 mars 2010 12:45
    vendredi 5 mars 2010 08:59
  • Merci de ta réponse, tu as bien deviné j'arrive de Visual Basic 6.0 par contre c'est vrai que je n'avais pas précisé, j'essaye la version Visual Basic 2008 express gratuite pour voir ce que ça donne et bin je suis pas mal paumé :)

    bon je file étudier la page que tu ma fourni

    surement à bientot,

    Fifi
    vendredi 5 mars 2010 09:15
  • Bon je vois l'idée (qui complique un max par rapport à 6.0) mais j'ai un problème. Il est dit de placer la ligne  MyControlArray = New ButtonArray(Me) à la fin du constructeur du formulaire or que cette dernière fait appel à la sub Public Sub New(ByVal host As System.Windows.Forms.Form) et MyControlArray n'est déclaré qu'au niveau Form1 et donc inconnu par la Class ButtonArray

    Pour les valeur d'aspet du controle (backcolor,top,width,...) peut-on les modifier à partir de MyControlArray(NumIndex). dans Form1 ? car dans ce cas autant supprimer ces lignes de Public Sub AddNewButton()
        aButton.Top = Count * 25
        aButton.Left = 100
        aButton.Tag = Me.Count
        aButton.Text = "Bouton " & Me.Count.ToString
    car si on peut nommer le controle par MyControlArray(NumIndex). pas besoin de gaspiller la proprièté Tag qui est bien utile des fois

    Donc tout le traitements des événements des controles crée le seront dans la Class ButtonArray en créant une sub pour chaque type d'événement comme Public Sub ClickHandler ? (plus d'un on du abandonner l'idée !)

    Amicalement, Fifi

    Voici le code que j'ai crée à partir de l'explication fourni par le lien, j'ai peut être fait une erreur quelque part

    Public Class ButtonArray
      Inherits System.Collections.CollectionBase
      Private ReadOnly HostForm As System.Windows.Forms.Form
      Public Sub AddNewButton()
        ' Crée une nouvelle instance de la classe Button.
        Dim aButton As New System.Windows.Forms.Button()
        AddHandler aButton.Click, AddressOf ClickHandler
        ' Ajoute le bouton à la liste interne de la collection.
        Me.List.Add(aButton)
        ' Ajoute le bouton à la collection de contrôles du formulaire
        ' référencé dans le champ HostForm.
        HostForm.Controls.Add(aButton)
        ' Définit les propriétés initiales de l'objet button.
        aButton.Top = Count * 25
        aButton.Left = 100
        aButton.Tag = Me.Count
        aButton.Text = "Bouton " & Me.Count.ToString
      End Sub
      Public Sub New(ByVal host As System.Windows.Forms.Form)
        HostForm = host
        Me.AddNewButton()
      End Sub
      Default Public ReadOnly Property Item(ByVal Index As Integer) As System.Windows.Forms.Button
        Get
          Return CType(Me.List.Item(Index), System.Windows.Forms.Button)
        End Get
      End Property
      Public Sub Remove()
        ' Vérifie qu'il existe un bouton à supprimer.
        If Me.Count > 0 Then
          ' Supprime le dernier bouton ajouté au
          ' tableau de la collection des contrôles
          ' du formulaire hôte. Remarquez l'utilisation
          ' de la propriété par défaut en accédant
          ' au tableau.
          HostForm.Controls.Remove(Me(Me.Count - 1))
          Me.List.RemoveAt(Me.Count - 1)
        End If
      End Sub
      Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs)
        MessageBox.Show("vous avez cliqué sur le bouton " & CType(CType(sender, Button).Tag, String))
      End Sub
    End Class



    Public Class Form1
      ' Déclare un nouvel objet ButtonArray.
      Dim MyControlArray As ButtonArray
      Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        ' Appelle la méthode AddNewButton de MyControlArray.
        MyControlArray.AddNewButton()
        ' Change la propriété BackColor du bouton 0.
        MyControlArray(0).BackColor = System.Drawing.Color.Red
      End Sub
      Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
        ' Appelle la méthode Remove de MyControlArray.
        MyControlArray.Remove()
      End Sub
    End Class

    vendredi 5 mars 2010 11:34
  • Bonjour,

     

    Je ne comprends le problème avec les évènements. Pourquoi voulez-vous traiter toutes les évènements d’un bouton ? Normalement, on n’a pas besoin d’utiliser toutes les évènements, l’évènement Click est suffisant.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse FifiCalin lundi 15 mars 2010 21:16
    lundi 8 mars 2010 11:01
  • Re, une question pour réponse j'adore :) alors je vais commencer par répondre par la tienne.

    Il m'arrive souvent d'utiliser plusieur sub événement d'un controle selon les besoin du programme, par exemple pour un groupe de TextBox ,il arrive que dans certain TextBox on entre souvent la même valeur, donc pour simplifier la saisie on met cette valeur dans la propièté Text
    Pour ne pas avoir à se servir de la souris, on règle la propièté TabStop de chaque controle du groupe sur True et pour les autres controle de la feuille comportant cette proprièté sur False. On prend soin de classé la proprièté TabIndex de chaque controle du groupe de façon que la tabulation se fasse de façon cohérrante par rapport à l'agencement des controles.
    Seulement il se peut que l'on ai besoin de saisir une autre valeur dans le controle, pour ne pas avoir à éffacer la valeur déclaré dans la propièté Text je me sers de ces quelques lignes

    Private Sub txtVal_GotFocus(Index As Integer)
       txtVal(Index).SelStart = 0
       txtVal(Index).SelLength = Len(txtVal(Index).Text)
    End Sub

    Qui permette de selectionner la totalité du texte du controle sur le quel je viens de me déplacer grace à la tabulation, si je veus le conserver je tape [Tab] pour passer au controle suivant, si je veus l'effacer pour entrer une valeur différente la première frappe l'éffacera, si je veus juste modifier une partie du texte je tape [Fin] et j'effectue la modification.

    Voila, d'ailleur si les controles on plusieur événement se n'est pas par hasard, si l'on avait juste l'événement Click c'est comme si on avait un panneau qu'avec des intérrupteur pour allumer des ampoules

    Sinon pour mon problème, j'ai bien exécuté chaque chapitre de l'aide et fait tout comme ils ont dit mais cela ne fonctionne pas à cause de la ligne que j'ai cité dans mon post précédent, donc sois il y une erreur dans l'aide, sois c'est moi qui est fait une erreur

    si c'est moi c'est peut être qu'il faut une déclaration particulière au niveau de Class ButtonArray de façon à faire le lien avec la déclaratrion dans Form1 de Dim MyControlArray As ButtonArray.

    Car si on place la ligne MyControlArray = New ButtonArray(Me) dans Class ButtonArray cela provoque une erreur puisque Class ButtonArray ne connait pas la variable MyControlArray déclaré dans Form1
    • Marqué comme réponse FifiCalin lundi 15 mars 2010 21:16
    lundi 8 mars 2010 23:01