Im Vordergrund liegende Picturebox für Clicks unsichtbar

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von TTopsecret.

    Im Vordergrund liegende Picturebox für Clicks unsichtbar

    Schönen Tag zusammen

    Habe ein Problem, dass ich nicht lösen kann:
    Auf einen grossen Picturebox werden mithilfe einer Liste kleinere Picturesboxes gelegt. Jetzt möchte ich aber, dass, wenn ich auf eines der kleinen Picturesboxes trotzdem das grosse Picturebox dahinter angesprochen wird. Geht das mit Windows Forms?

    Eine zweite Möglichkeit wäre noch, wenn ich ein Event auf die Picturesboxliste legen könnte. Also wenn ich auf eins der kleinen Pictureboxes klicke ein Event ausgelöst wird.

    Danke schon mal für die Hilfe
    TTopsecret

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TTopsecret“ () aus folgendem Grund: Verständlichkeit...

    Dann leite die kleinen PictureBoxes von einer gemeinsamen Basisklasse

    VB.NET-Quellcode

    1. Class MyPictureBoxes
    2. Inherits System.Windows.Forms.PictureBox
    3. Public Event Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    4. Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
    5. RaiseEvent Click(sender, e)
    6. End Sub
    7. End Class
    ab, da musst Du den Durchreich-Mechanismus nur 1x hinschreiben.
    Pro Event, das Du benötigst musst Du einen Eventhandler schreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Die Pictureboxes sind in einer Liste. Da kann ich sie doch nicht mit Picturebox1 ansprechen :?

    VB.NET-Quellcode

    1. pics.Add(New PictureBox With {.BackColor = Color.Black, .Location = New Point(mouse_position_x, mouse_position_y), .Parent = Me, .Size = New Size(50, 50)})

    Die Liste wird am Schluss 40Pictureboxes enthalten


    Was ist mit der andere Möglichkeit, den Click auf den hinteren Imagebox weiterzuleiten? Wenn möglich, würde ich diese Variante bevorzugen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TTopsecret“ ()

    Du hast also Dein Problem nicht korrekt formuliert ;( und sagst: Mach mal.
    Also: Bekomm es allein raus. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Du hast also Dein Problem nicht korrekt formuliert ;( und sagst: Mach mal.
    Also: Bekomm es allein raus. :D
    Halt, Stop mal, ich habe nur um einen Lösungsansatz(!) gebeten, weil ich im Internet nichts gefunden habe und selbst nicht darauf komme :P
    Und ich denke auch, dass ich es richtig formuliert habe, nur etwas schwer Verständlich war ;)

    Konnte aber das Problem leider immer noch nicht lösen :(
    Ist es etwa gar nicht möglich ohne für jede Picturebox ein eigenes Event zu erstellen? :/
    Das Problem ist so gut formuliert, wie es andere verstehen.
    Du hast sonst eine ewig lange Liste mit

    VB.NET-Quellcode

    1. Private Sub MyPictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click, PictureBox4.Click ' usw.
    2. ' ...
    3. End Sub

    Geht natürlich. Was willst Du denn mit den Klicks erreichen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Soviel ich weiss, habe ich nicht geschrieben, dass ich es gut formuliert habe^^ ist aber auch nicht einfach so zu erklären

    Beim Klick wird das kleinere Image an diesem Punkt plaziert(funktioniert auch). Fast wie eine Figur. Wenn ich jetzt nochmal an diesen Punkt klicke, möchte ich die Koordinaten des Klicks vom linken oberen Ecke des grossen Bildes haben. Mit diesen Koordinaten frage ich die Liste ab, welches kleinere Bild sich dort befindet.
    Du kannst die Koordinaten der Mausklicks des einen Controls in Koordinaten eines anderen Controls umrechnen:

    VB.NET-Quellcode

    1. Private Sub Picture1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    2. Dim pt As New Point(e.X, e.Y)
    3. Dim screenPoint As Point
    4. Dim PicturePoint As Point
    5. screenPoint = PictureSmall.PointToScreen(pt)
    6. PicturePoint = PictureBig.PointToClient(screenPoint)
    7. End Sub

    Nützt Dir das was?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kann damit nicht unbedingt viel anfangen. Stelle die Frage mal anders: Wie arbeitet man mit einer Liste von Buttons, Pictureboxes usw?
    Ich weiss, dass man sie z.B. liste(0) aufrufen könnte. Doch wie kann eine Liste von Buttons ein event auslösen? Die Buttons haben ja in der Liste nicht mal einen richtigen eigenen Namen
    Da sind wir wieder bei meiner gemeinsamen Basisklasse, => Post 2:

    VB.NET-Quellcode

    1. Public Class MyPictureBox
    2. Inherits PictureBox
    3. Public Event MyEvent(ByVal sender As System.Object, ByVal e As MouseEventArgs)
    4. Public Sub MakeEvent(ByVal e As MouseEventArgs)
    5. RaiseEvent MyEvent(Me, e)
    6. End Sub
    7. End Class

    und Du rufst auf

    VB.NET-Quellcode

    1. MyList(17).MakeEvent(e)

    Die Parameter musst Du natürlich anpassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. RaiseEvent MyEvent(Me, e)

    Me ist das Zauberwort.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aber damit ruf ich bloss etwas in der andere Klasse auf. Ich möchte ja, dass überhaupt etwas ausgelöst wird, wenn ich auf einer der Button in der Liste drücke und dessen "tag" herausfinden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TTopsecret“ ()