Mehrere Pictureboxen Linksklick Koordinaten

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mehrere Pictureboxen Linksklick Koordinaten

    Hallo liebes Forum :) ,
    ich hoffe ich bin in der richtigen Kategorie wenn nicht dann tut´s mir Leid... :P

    So zu meiner Frage undzwar programmiere ich ein Fernwartungsprogramm und ich habe noch ein paar Probleme mit der Bildschirmübertragung.
    Ich habe 16 Pictureboxen und in jeder Picturebox wird ein Teil des Bildschirmfotos angezeigt. Ich möchte jetzt feststellen wo in den Pictureboxen geklickt wurde und diesen Klick dann auf dem Remote Rechner ausführen.
    Mit einer Picturebox ist das ja garkein Problem dafür habe ich diesen Sourcecode:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ClickY = (boundh / PictureBox1.Size.Height) * e.Location.Y
    2. ClickX = (boundw / PictureBox1.Size.Width) * e.Location.X


    Aber wie mache ich das jetzt mit 16 Pictureboxen? ?(

    PS: Die Pictureboxen sind in einem 4x4 Muster aufgeteilt

    Bohnenstange12 schrieb:

    Aber wie mache ich das jetzt mit 16 Pictureboxen?
    Was?

    VB.NET-Quellcode

    1. ClickY = (boundh / PictureBox2.Size.Height) * e.Location.Y
    2. ClickX = (boundw / PictureBox2.Size.Width) * e.Location.X
    3. ' ...
    4. ClickY = (boundh / PictureBox3.Size.Height) * e.Location.Y
    5. ClickX = (boundw / PictureBox3.Size.Width) * e.Location.X
    6. ' ...
    7. ClickY = (boundh / PictureBox4.Size.Height) * e.Location.Y
    8. ClickX = (boundw / PictureBox4.Size.Width) * e.Location.X
    9. ' ...
    10. ClickY = (boundh / PictureBox5.Size.Height) * e.Location.Y
    11. ClickX = (boundw / PictureBox5.Size.Width) * e.Location.X
    Oder was meinst Du?
    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!
    Ne so meinte ich das nicht tut mir Leid wenn ich mich da unklar ausgedrückt habe aber ich habe einen Screenshot der in 16 Teile geteilt ist du hast mir selbst bei dem Source geholfen :)
    In etwa so:



    Und jetzt möchte ich feststellen wo geklickt worden ist damit ich die Koordinaten an den "Server" der die Befehle empfängt weiterleiten kann :D

    Bohnenstange12 schrieb:

    du hast mir selbst bei dem Source geholfen
    Entschuldige bitte, wenn mir das nicht gegenwärtig war.
    Was also ist Dein Plan? Hast Du 16 PictureBoxen?
    Ja: Dann haben die 16 MouseDown-Events.
    Nein: Du hast Dein Problem falsch beschrieben.
    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!
    Dann formuliere mal Deine Frage an Hand eines Stückchen Codes.
    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!
    Also den Code zum erstellen des Screenshots den kann ja jeder hier nachlesen:
    vb-paradise.de/programmieren/m…von-screenshot-dispose-n/

    Und wie meinst du das mit erklären anhand eines Codebeispiels? Ich habe keinen Sourcecode ich steh nur gerade auf´m Schlauch und weis nicht wie ich den Code für 1 Picturebox:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
    2. ClickY = (boundh / PictureBox1.Size.Height) * e.Location.Y
    3. ClickX = (boundw / PictureBox1.Size.Width) * e.Location.X
    4. Server.SendeTextCrypted("MouseMove~+~" & ClickX & "~+~" & ClickY)
    5. End Sub


    in einen Code für 16 Pictureboxen umwandele :)
    Delegaten oder du machst da nen eigenes Sub und rufst das in jedem Eventhandler auf.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Ich hätte da noch ne Idee, aber die funktioniert leider nicht undzwar eine transpararente Picturebox über alle 16 kleinen Pictureboxen drüberlegen die dann die klick bzw. mousevents abfängt wäre das irgendwie zu realisieren? :)
    Meinst du so?

    VB.NET-Quellcode

    1. Private Sub Klicken(ByVal sender As PictureBox, e As System.EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click, PictureBox4.Click, PictureBox5.Click, PictureBox6.Click, PictureBox7.Click, PictureBox8.Click, PictureBox9.Click, PictureBox10.Click, PictureBox11.Click, PictureBox12.Click, PictureBox13.Click, PictureBox14.Click, PictureBox15.Click, PictureBox16.Click
    2. Select Case True
    3. Case sender Is PictureBox1
    4. 'Falls Picturebox1 gedrückt wurde dann..
    5. Case sender Is PictureBox2
    6. 'Falls Picturebox2 gedrückt wurde dann..
    7. End Select
    8. 'usw
    9. End Sub
    Meinst du so?


    Genau das meine ich! :thumbsup:

    Und jez is halt meine Frage wie ich das dann mit den Koordinaten mache bei einem bildschirm von mal angenommen 1920x1080 hat dann jedes bild eine breite von 120x67,5 und wenn ich jez mal angenommen auf die 3 picturebox klicke kriege ich die koordinaten 100x60 aber das ist ja nicht korrekt da ja 2 bilder davor waren also muss ich die noch dazu zählen also (120 + 120 + 100) x (67,5 + 67,5 + 60) also 340x195 wie errechne ich jez am besten dieses ergebnis? :D
    Also Leute danke an die die mir (versucht) haben zu helfen ich glaube ich habe mich einfach zu blöd ausgedrückt aber ich habe jetzt ne andere lösung gefunden und zwar lege ich einfach ein Transparentes Panel über alle 16 Pictureboxen und so sehe ich zwar die einzelnen bilder aber klicke immer auf das panel und kann so die genauen koordinaten bestimmen

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class TransparentPanel
    3. Inherits Panel
    4. Private _opacity As Single
    5. Public Sub New()
    6. MyBase.SetStyle(ControlStyles.ResizeRedraw, True)
    7. MyBase.BackColor = Color.Black
    8. Me.Opacity = 0.5F
    9. End Sub
    10. ' Properties
    11. Protected Overrides ReadOnly Property CreateParams As CreateParams
    12. Get
    13. Dim cp As CreateParams = MyBase.CreateParams
    14. cp.ExStyle = (cp.ExStyle Or &H20)
    15. Return cp
    16. End Get
    17. End Property
    18. <DefaultValue(CSng(0.5F)), _
    19. Description("Gibt die Durchsichtigkeit (0.0 - 1.0) an, mit der die Hintergrundfarbe gezeichnet wird.")> _
    20. Public Property Opacity As Single
    21. Get
    22. Return Me._opacity
    23. End Get
    24. Set(ByVal value As Single)
    25. If (value < 0.5F) Then
    26. value = 0.0F
    27. ElseIf (value > 1.0F) Then
    28. value = 1.0F
    29. End If
    30. If Not (Me._opacity = value) Then
    31. Me._opacity = value
    32. MyBase.Invalidate()
    33. ' TODO: PropertyChanged
    34. End If
    35. End Set
    36. End Property
    37. Protected Overrides Sub OnPaintBackground(ByVal pe As PaintEventArgs)
    38. ' Nichts tun
    39. ' MyBase.OnPaintBackground(pe)
    40. End Sub
    41. Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
    42. ' Verwendet Hintergrundfarbe * Opacity
    43. Using brush As SolidBrush = New SolidBrush(Color.FromArgb( _
    44. CInt((Me.Opacity * 255.0!)), _
    45. Me.BackColor))
    46. pe.Graphics.FillRectangle(brush, New Rectangle(Point.Empty, MyBase.Size))
    47. End Using
    48. End Sub
    49. Protected Overrides Sub OnResize(ByVal eventargs As EventArgs)
    50. MyBase.OnResize(eventargs)
    51. Me.InvalidateParent()
    52. End Sub
    53. Protected Sub InvalidateParent()
    54. ' Parentbereich neu zeichnen
    55. If MyBase.Parent IsNot Nothing Then
    56. Dim rect As New Rectangle(MyBase.Location, MyBase.Size)
    57. MyBase.Parent.Invalidate(rect, True)
    58. End If
    59. End Sub
    60. End Class


    PS: ist nicht mein Sourcecode :)

    Bohnenstange12 schrieb:

    und kann so die genauen koordinaten bestimmen
    Es ist schon sehr wichtig, ein Problem präzise zu beschreiben, um eine genaue Lösung zu bekommen. Die Koordinaten hast Du doch, die bringen die MouseEventArgs mit.
    Gib sie einfach in einem Label aus und sieh selbst, wo Du die Maus bewegst.
    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!