locked
probleme de menus RRS feed

  • Discussion générale

  • bonsoir,

    je suis actuellement en train de faire une form avec un menustrip dans ce container j'ai creer un toolstipmenuitem auquel j'ai charger des items recuperer d'une base de données

    mon code fonctionne si je met l'index de l'item en dur mais je n'ai rien trouver pour que l'index de l'item me soit retourner et que je puisse ensuite m'en servir pour recuperer le texte de ce dernier

    voici mon code

    Using Myconnexion As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Asmolding.mdf;Integrated Security=True;User Instance=False")

    Dim Mycommand As SqlCommand = Myconnexion.CreateCommand

    Mycommand.CommandText = "SELECT CodeUser FROM GestionUser"

    Myconnexion.Open()

    Dim Myreader As SqlDataReader = Mycommand.ExecuteReader

    While Myreader.Read

    TechnicienAtelierToolStripMenuItem.DropDownItems.Add(Myreader(0))

    End While

    a l'aide de cette commande je peut recuperer le nombre d'item que j'ai ajouter

    dim x = technicienAtelierToolStripMenuItems.count


    Xavier
    mardi 6 septembre 2011 19:41

Toutes les réponses

  • Bonsoir,

    La méthode ToolStripItemCollection.Add retourne le ToolStripItem qui vient d'être créé. Si vous souhaitez tout de même son index, je vous suggère de le passer dans la méthode IndexOf de la collection DropDownItems.

    Dim toolStripItem as ToolStripItem = TechnicienAtelierToolStripMenuItem.DropDownItems.Add(Myreader(0))
    Dim index as Integer = TechnicienAtelierToolStripMenuItem.DropDownItems.IndexOf(toolStripItem)

    Bien à vous,

    Mathieu

    PS : Je suis nouveau ici, mais j'ai l'impression que le forum approprié pour les questions relatives à Windows Forms est le forum "Développement .NET (en général)".


    mardi 6 septembre 2011 20:17
  • Bonsoir,

    tout d'abord merci pour cette reponse rapide.

    je viens de mettre en application l'info transmise malheureusement cette méthode me retourne toujours le dernier index créé, mais pas l'index sélectionné a l'aide de la souris.

    Mon problème est qu'il me faut récupérer l'index de dropdownitem sélectionner pour pouvoir l'incorporer dans une requête SQL

    j'ai chercher dans les surcharges mais je n'ai pour le moment rien trouver.

     

    Cordialement

    xavier 

     


    Xavier
    mardi 6 septembre 2011 21:38
  • re bonsoir,

    je viens de faire de mettre un place une solution, je ne pense pas que ce soit la meilleure mais elle fonctionne;

    une fois le dropdownitem charger comme expliquer precedemment je fais une boucle et je passe en revue tous les index du dropdownitem concerne en test si l'index sur lequel je passe est un bien un index selectionner si c'est le cas alors je sort de la boule et je recupere  le text lie a l'index

            Dim i As Integer

            For i = 0 To NumeroDOFToolStripMenuItem.DropDownItems.Count - 1 Step 1

                If NumeroDOFToolStripMenuItem.DropDownItems.Item(i).Selected = True Then Exit For

            Next

            ClearTableau()

            GestionOF("OF", Nothing, "", "", "", NumeroDOFToolStripMenuItem.DropDownItems.Item(i).Text)

    qu'en pensez vous ?
    cordialement 
    xavier


    Xavier
    mardi 6 septembre 2011 21:48
  • Ah, je comprends mieux ce que vous voulez faire maintenant. Cela paraît une solution acceptable. 

    Petite suggestion : Si vous ne voulez pas être contraint de stocker dans la propriété Text du ToolStripItem votre valeur de base de données, il existe une propriété Tag spécialement conçue pour recevoir ce genre d'objet et qui vous laissera la liberté d'afficher à l'utilisateur un chaîne de caractère plus "user-friendly".

    Cordialement,

    Mathieu


    Liège, Belgique
    mardi 6 septembre 2011 22:43
  • Bonjour,

    Vu dans un autre groupe. Ce qui gêne pour aider efficacement est surtout de ne pas savoir quel le but de cette récupération d'index. Je soupçonne que ce que l'on veut réellement est de récupérer l'élément sur lequel on vient de cliquer. Si oui, on peut faire qq chose comme :

        For Each item As ToolStripItem In v.DropDownItems
    
                AddHandler item.Click, AddressOf MyClick
    
            Next
    
    

    ce qui permet à chaque élément de demander à appeler la fonction Click lorsque l'élément est cliqué. Ensuite :

        Public Sub MyClick(ByVal sender As Object, ByVal e As EventArgs)
    
            MessageBox.Show("Vous avez cliqué sur " & CType(sender, ToolStripMenuItem).Text)
    
        End Sub
    
    
    
    

    Dans "sender" on récupère l'objet qui a été cliqué on peut donc facilement récupérer son texte.

    Parfois il est préférable de donner le but général (par exemple récupérer l'élément cliqué) plutôt que de demander de l'aide sur la meilleure façon dont on croit pouvoir le faire (récupérer l'index d'un élément). Même si on ne veut que récupérer l'index, avoir une idée du but général (celui cliqué, celui sélectionné, quand la souris passe dessus etc...) peut aider grandement à comprendre votre contexte.

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 7 septembre 2011 11:51
  • bonjour,

    effectivement le but est de pouvoir recuperer l'information lors que je clic sur l'element concerner et ainsi pouvoir faire appel a des forms differentes en fonction de l'element cliquer

    je vais me pencher sur les elements envoyes .

    Merci pour les reponses

    cordialement

    xavier


    Xavier
    jeudi 8 septembre 2011 07:06
  • Donc cela devrait être ok.

    C'est un mécanisme général. Tous les gestionnaires d'évènements sont appelés avec un premier argument "sender" qui permet de récupérer l'objet qui est à l'origine de cet évènement et un deuxième argument qui va fournir des infos complémentaires sur l'évènement.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    jeudi 8 septembre 2011 18:01