none
Copie d'un élément objet d'une collection vers une autre collection RRS feed

  • Discussion générale

  • Bonjour,

    Je voudrais récupérer un élément d'un MenuStrip pour l'ajouter à un ContextMenuStrip.

    Dim MenuContext as New ContextMenuStrip

    Diim XYPoint as new System.DrawingPoint(0,0)

    MenuContext.Items.add(MenuStrip1.Items(1))

    MenuContext.Show (ObjetAffichage,XYPoint)

    Ce code permet d'avoir l'item du MenuStrip dans le ContextMenu, mais il me le supprime du MenuStrip.

    L'item affiché du ContextMenu est bien celui du Menustrip, mais il disparait du MenuStrip.

    J'ai essayé avec la méthode Copy vers un tableau puis de cloner le tableau et de passer l'élément souhaité mais le pb reste le même.

    Cordialement.

    • Type modifié Ciprian Duduiala mardi 20 décembre 2011 15:33 attente de feedback
    mercredi 14 décembre 2011 15:17

Toutes les réponses

  • Bonjour,

     

    Essayez le code suivant :

    Dim MenuContext as New ContextMenuStrip
    
    Diim XYPoint as new System.DrawingPoint(0,0)
    
    MenuContext.Items.Add(MenuStrip1.Items(1).Text, MenuStrip1.Items(1).Image, (AddressOf ToolStripMenuItem1_Click))
    
    MenuContext.Show (ObjetAffichage,XYPoint)

    Avec ToolStripMenuItem1_Click comme votre gestionnaire de l'event Click de MenuStrip1.Items(1) s'il y 'en a, sinon utiliser l'autre surcharge de la méthode Add :

    MenuContext.Items.Add(MenuStrip1.Items(1).Text, MenuStrip1.Items(1).Image)

     

    J'espère que ce ci vous aidera, sinon expliquer nous ce que vous voulez faire indépendamment de votre implémentation.

    Cordialement.




    mercredi 14 décembre 2011 21:10
    Auteur de réponse
  • Je voudrais simplement récupérer une colonne d'un menu et l'afficher par click de droite lorsque je suis sur un objet particulier.

    Le problème est même plus général car il s'agit de prendre un élément d'une collection et le mettre dans une autre sans l'enlever de la première.

    Votre méthode est intéressante, merci.

    jeudi 15 décembre 2011 07:18
  • Votre méthode n'implémente pas les éléments MenuStrip contenus dans MenuStrip1.Items(1).

    Il faut faire une copie de l'objet MenuStrip1.Items(1).

    jeudi 15 décembre 2011 08:06
  • Bonjour,

     

    C'est quoi le type concret de MenuStrip1.Items(1) ?

     

    Cordialement.

    jeudi 15 décembre 2011 08:49
    Auteur de réponse
  • Le type est un ToolStripMenuItem.

    Via le click de droite je peux l'appeler en utilisant MenuStrip1.Items(1).ShowDropDown mais ne l'affiche pas à l'endroit souhaité : Cela reste accroché au menu.

    Il faudrait cloner MenuStrip1.Items(1) et le passer au ContextMenu.

    La méthode clone n'est pas implémentée.

    En VB6 je passais par PopupMenu.

    jeudi 15 décembre 2011 09:59
  • Je viens de trouver cette méthode sur le net.

    Je ne l'ai pas encore testé.

    Partial Class ClonableToolStripMenuItem
        Inherits System.Windows.Forms.ToolStripMenuItem
    Friend Function Clone() As ToolStripMenuItem
      
            ' dirt simple clone - just properties, no subitems
      
            Dim menuItem As New ClonableToolStripMenuItem()
            menuItem.Events.AddHandlers(Me.Events)
      
            menuItem.AccessibleName = Me.AccessibleName
            menuItem.AccessibleRole = Me.AccessibleRole
            menuItem.Alignment = Me.Alignment
            menuItem.AllowDrop = Me.AllowDrop
            menuItem.Anchor = Me.Anchor
            menuItem.AutoSize = Me.AutoSize
            menuItem.AutoToolTip = Me.AutoToolTip
            menuItem.BackColor = Me.BackColor
            menuItem.BackgroundImage = Me.BackgroundImage
            menuItem.BackgroundImageLayout = Me.BackgroundImageLayout
            menuItem.Checked = Me.Checked
            menuItem.CheckOnClick = Me.CheckOnClick
            menuItem.CheckState = Me.CheckState
            menuItem.DisplayStyle = Me.DisplayStyle
            menuItem.Dock = Me.Dock
            menuItem.DoubleClickEnabled = Me.DoubleClickEnabled
            menuItem.Enabled = Me.Enabled
            menuItem.Font = Me.Font
            menuItem.ForeColor = Me.ForeColor
            menuItem.Image = Me.Image
            menuItem.ImageAlign = Me.ImageAlign
            menuItem.ImageScaling = Me.ImageScaling
            menuItem.ImageTransparentColor = Me.ImageTransparentColor
            menuItem.Margin = Me.Margin
            menuItem.MergeAction = Me.MergeAction
            menuItem.MergeIndex = Me.MergeIndex
            menuItem.Name = Me.Name
            menuItem.Overflow = Me.Overflow
            menuItem.Padding = Me.Padding
            menuItem.RightToLeft = Me.RightToLeft
      
            menuItem.ShortcutKeys = Me.ShortcutKeys
            menuItem.ShowShortcutKeys = Me.ShowShortcutKeys
            menuItem.Tag = Me.Tag
            menuItem.Text = Me.Text
            menuItem.TextAlign = Me.TextAlign
            menuItem.TextDirection = Me.TextDirection
            menuItem.TextImageRelation = Me.TextImageRelation
            menuItem.ToolTipText = Me.ToolTipText
      
            menuItem.Available = Me.Available
      
            If Not AutoSize Then
                menuItem.Size = Me.Size
            End If
            Return menuItem
        End Function
    End Class
    vendredi 16 décembre 2011 08:57
  • Bonjour, Marcel,

     

    Merci pour avoir partagé avec nous cette solution. Merci de partager avec nous les résultats après les tests, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 16 décembre 2011 11:47
  • Bonjour,

    Essayez avec :

     

            Dim m As New ToolStripMenuItem
            m.Name = MenuStrip1.Items(0).Name
            m.Text = MenuStrip1.Items(0).Text
            MenuContext.Items.Add(m)
    
    
    

     


    Cordialement, Li31
    samedi 17 décembre 2011 10:46
  • Merci mais cela ne fonctionne pas.

    Vous copiez seulement le nom et le texte.

    L'objet contient des sous item, des procédures évènementielles dans chaque item (avec du code dans ces procédures).

    Il faut cloner l'objet.

    samedi 17 décembre 2011 22:07
  • Bonjour,

    Pourquoi ne pas mettre une procédure simple avec une visibilité du menu en active ou désactive ?

    Mettre tout les items dans les deux menus (ContextMenu, et MenuStrip), puis mettre les items que vous voulez en visible a true ou a False en fonction de ce que vous voulez, puis d'activés avec l’option que vous voulez et de désactiver la visibilité de l'autre.
    Le fait de faire une procédure simple (un items qui envois toujours la meme chose) pourra exécuter l’événement souhaiter.


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    dimanche 18 décembre 2011 15:24
    Auteur de réponse
  • Bonjour, Marcel,

     

    Est-ce que l’idée de Xavier vous a aidé à avancer ? Sinon, je vois qu’ils y sont des discussions sur ce sujet, mais les solutions semblent incomplètes. Par exemple, cette solution  est aussi proposée dans cette discussion , mais l’utilisateur qui a posé la question veut aussi copier la fonction qui géré l’évènement clic . Je n’ai pas testé le code, mais de ce que je vois il gère aussi cette action. Une autre discussion sur le sujet : http://stackoverflow.com/questions/4162851/can-i-use-menustrip-as-contextmenu .

     

    Les liens sont en anglais, mais vous pouvez utiliser Microsoft Translator pour les traduire.

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 19 décembre 2011 08:16
  • Bonjour,

    La solution me satisfait pas. Il faut cloner l'objet. Dès que j'aurai le temps; j'essayerai de le faire.

    Par contre, le contrôle "Menu" remplacé par MenuStrip permettait le clonage : fonction CloneMenu.

    Cordialement.

    lundi 19 décembre 2011 12:01