Announcement

Collapse
No announcement yet.

aufrufendes Element identifizieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • aufrufendes Element identifizieren

    Hi Leute,

    ich habe folgendes Problem:

    Zur Laufzeit werden Panels erstellt, welche u.a. auch mit einem ContextMenuStrip versehen sind, welches weitere Funktionen bereitstellt. Für den weitere Ablauf ist es wichtig zu wissen, über welches Panel das Kontextmenü aufgerufen wurde.

    Was kann man tun?

    Besten Dank im Voraus!

    Ciao Arthur

  • #2
    Du kannst die Eigenschaft "Parent" verwenden

    Gruss

    Comment


    • #3
      Im ausgelösten Eventhandler (berichtigt mich wenn ich es fals ausdrücke) kannst du den Namen von "sender" auslesen.
      Du sagtest, du weißt, dass der "sender" ein Panel ist.
      Dann müsste es folgendermaßen funktionuieren:
      [highlight=vb.net]
      Private Sub DeinMenüHandler(ByVal sender As Object, ByVal e As EventArgs) Handles DeinMenüItem.Click
      Dim pnl As Panel = DirectCast(sender, Panel)
      Select Case pnl.Name
      Case "Panle1"
      Tu dies ...
      Case "Panel2"
      Tu das ...
      Case Else
      Tu was anderes ...
      End Select
      End Sub
      [/highlight]

      LG
      Steve
      Die Sonne geht auf - Die Sonne geht unter - ich bin wieder drauf, doch irgendwann komm ich runter

      Comment


      • #4
        Originally posted by Newbie View Post
        Im ausgelösten Eventhandler (berichtigt mich wenn ich es fals ausdrücke) kannst du den Namen von "sender" auslesen.
        Du sagtest, du weißt, dass der "sender" ein Panel ist.
        Dann müsste es folgendermaßen funktionuieren:
        [highlight=vb.net]
        Private Sub DeinMenüHandler(ByVal sender As Object, ByVal e As EventArgs) Handles DeinMenüItem.Click
        Dim pnl As Panel = DirectCast(sender, Panel)
        Select Case pnl.Name
        Case "Panle1"
        Tu dies ...
        Case "Panel2"
        Tu das ...
        Case Else
        Tu was anderes ...
        End Select
        End Sub
        [/highlight]

        LG
        Steve
        Nein das geht nicht, der Handler wird nur dann aufgerufen wenn du auf eine leere Stelle im Panel clickst. Vermutlich möchtest du das nicht, sondern den Click auf das Kontextmenü auswerten.

        Beim KontextMenü bleibt dir vermutlich keine andere Möglichkeit als die Position der Maus auszuwerten. Das ganze könnte so aussehen:

        [highlight=vb.net]
        Private Sub contextMenu_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles contextMenu.MouseClick
        With myPanel
        If e.X > .PointToScreen(New Point(.Left, .Top)).X _
        And e.X < .PointToScreen(New Point(.Right, .Top)).X _
        And e.Y > .PointToScreen(New Point(.Left, .Top)).Y _
        And e.Y < .PointToScreen(New Point(.Left, .Bottom)).Y _
        Then
        Debug.WriteLine("KonextMenü befindet sich im Panel " & .Name)
        End If
        End With
        End Sub
        [/highlight]

        Die elegantere Methode ist aber wenn du einfach eine eigene Klasse für das Panel oder das ContextMenuStrip (je nach dem was besser passt) definierst, da kannst du dann deine Eigenschaften hinzufügen wenn das Panel, bzw. das KontextMenü dynamisch erzeugt wird:

        [highlight=vb.net]
        Private Class MyPanelClass
        Inherits Panel
        Public Sub New ....
        [/highlight]

        Gruss

        Comment


        • #5
          Hallo

          Die elegantere Methode ist aber wenn du einfach eine eigene Klasse für das Panel oder das ContextMenuStrip (je nach dem was besser passt) definierst, da kannst du dann deine Eigenschaften hinzufügen wenn das Panel, bzw. das KontextMenü dynamisch erzeugt wird:
          Ich würde sagen, die eleganteste Lösung ist im Framwork schon enthalten.
          [highlight=vbnet]ContextMenu1.SourceControl[/highlight]

          cu

          Comment

          Working...
          X