eigenes Steuerelemnt von Control abgeleitet bekommt kein Kontextmenue

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mangafreak1995.

    eigenes Steuerelemnt von Control abgeleitet bekommt kein Kontextmenue

    hi
    hier mal ein problem der anderen art :)

    von meiner hauptform wird ein dialog aufgerufen, der dem benutzer das dynamische erstellen von einem control ( groupbox) ermöglicht. die hauptform nimmt die eingegebenen daten auf und erzeugt damit ein objekt (tmp_przbild) der klasse prozessbild, welche von groupbox abgeleitet ist. das objekt (tmp_przbild) wird in einem array (my_ProzessBilderArray) gespeichert und dann auf der Hauptform hinzugefügt. soviel zum nachfolgenden code. es funktioniert soweit auch alles, nur das kontextmenue wird bei einem rechtsklick auf der groupbox nicht angezeigt. warum nicht ??? wäre für hilfestellung dankbar



    VB.NET-Quellcode

    1. ' call den erstellen GroupBox Dialog
    2. If DIA_GroupBoxCreate.ShowDialog() = Windows.Forms.DialogResult.OK Then
    3. ReDim Preserve my_ProzessBilderArray(my_ProzessBilderArray.Length + 1)
    4. Dim tmp_przbild As New ProzessBild
    5. tmp_przbild.BackColor = DIA_GroupBoxCreate.fm_backgroundcolor
    6. tmp_przbild.Height = Me.Height - ToolStrip1.Height - 30
    7. tmp_przbild.Width = ToolStrip1.Width
    8. tmp_przbild.Top = 29
    9. tmp_przbild.Left = 0
    10. tmp_przbild.Visible = True
    11. tmp_przbild.Enabled = True
    12. tmp_przbild.BackgroundImage = DIA_GroupBoxCreate.fm_backgroundimage
    13. tmp_przbild.Font = DIA_GroupBoxCreate.fm_font1
    14. tmp_przbild.fm_font1 = DIA_GroupBoxCreate.fm_font1
    15. tmp_przbild.fm_font2 = DIA_GroupBoxCreate.fm_font2
    16. tmp_przbild.fm_font3 = DIA_GroupBoxCreate.fm_font3
    17. tmp_przbild.ForeColor = DIA_GroupBoxCreate.fm_forecolor
    18. tmp_przbild.Name = DIA_GroupBoxCreate.fm_name1
    19. tmp_przbild.fm_name1 = DIA_GroupBoxCreate.fm_name1
    20. tmp_przbild.fm_name2 = DIA_GroupBoxCreate.fm_name2
    21. tmp_przbild.fm_name3 = DIA_GroupBoxCreate.fm_name3
    22. tmp_przbild.fm_Point_SPS = DIA_GroupBoxCreate.fm_Point_SPS
    23. tmp_przbild.fm_Symbolik = DIA_GroupBoxCreate.fm_Symbolik
    24. tmp_przbild.fm_tag = DIA_GroupBoxCreate.fm_tag
    25. tmp_przbild.fm_tooltip1 = DIA_GroupBoxCreate.fm_tooltip1
    26. tmp_przbild.fm_tooltip2 = DIA_GroupBoxCreate.fm_tooltip2
    27. tmp_przbild.fm_tooltip3 = DIA_GroupBoxCreate.fm_tooltip3
    28. ToolTip1.SetToolTip(tmp_przbild, tmp_przbild.fm_tooltip1)
    29. 'contextmenue binden
    30. Dim _blankContextMenu As New ContextMenu
    31. Dim menuItem1 As New MenuItem("&Kopieren")
    32. Dim menuItem2 As New MenuItem("&Einfuegen")
    33. Dim menuItem3 As New MenuItem("&----------")
    34. Dim menuItem4 As New MenuItem("&Editieren")
    35. Dim menuItem5 As New MenuItem("&Löschen")
    36. Dim menuItem6 As New MenuItem("&----------")
    37. Dim menuItem7 As New MenuItem("&Info")
    38. menuItem1.Name = tmp_przbild.Name
    39. menuItem2.Name = tmp_przbild.Name
    40. menuItem3.Name = tmp_przbild.Name
    41. menuItem4.Name = tmp_przbild.Name
    42. menuItem5.Name = tmp_przbild.Name
    43. menuItem6.Name = tmp_przbild.Name
    44. menuItem7.Name = tmp_przbild.Name
    45. tmp_przbild.ContextMenu = _blankContextMenu
    46. Me.ContextMenu = _blankContextMenu
    47. 'AddHandler auf container setzen
    48. AddHandler menuItem5.Click, AddressOf GroupBoxControl_loeschen
    49. 'in my_ProzessBilderArray das Objekt tmp_przbild einfuegen
    50. my_ProzessBilderArray(my_ProzessBilderArray.Length - 1) = tmp_przbild
    51. ' control auf die hauptform adden
    52. Me.Controls.Add(my_ProzessBilderArray(my_ProzessBilderArray.Length - 1))
    53. End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Raziel1977“ ()

    setz die ContextMenu Eigenschaft jedes Controls in deinem Control auf das jeweilige ContextMenü...

    Redim Preserve ... ist veraltet und benötigt relativ viel Performance, da hier immer ein neues Array generiert wird und die alten Items hineinkopiert werden...
    Verwende deshalb statt Arrays z.B. eine List(Of...)

    VB.NET-Quellcode

    1. Private my_ProzessBilderArray As New List(Of ProzessBild)
    2. '[...]
    3. 'hinzufügen Funktioniert hier dann so:
    4. my_ProzessBilderArray.Add(zuHinzufügendesProzessBild)

    (bei der List(Of...) hast du auch so schöne Funktionen, wie Remove und RemoveAt zum entfernen von Items...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    das array habe ich geändert auf eine list wie empfohlen. den rest verstehe ich noch nicht so ganz.

    setz die ContextMenu Eigenschaft jedes Controls in deinem Control auf das jeweilige ContextMenü... ???

    wie meinste das genau ?

    ich hab es jetzt nochmal so versucht, brachte aber auch nix :(

    VB.NET-Quellcode

    1. my_ProzessBilderList.Add(tmp_przbild)
    2. my_ProzessBilderList(my_ProzessBilderList.Count - 1).ContextMenu = _blankContextMenu
    3. Me.Controls.Add(tmp_przbild)
    er meint:
    setz die ContextMenu-Eigenschaft jedes Controls auf deinem eigenen Control auf das jeweilige ContextMenü, das du grade codest ->

    VB.NET-Quellcode

    1. For Each c As Control In Me.Controls
    2. c.ContextMenu = '? ... ich weiß aber nicht ob jedes Element die Eigenschaft ContextMenu hat ... evtl. heißt sie anders oder existiert nicht
    3. Next