Maus Koordinaten beim scrollen verschoben

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von KaskadekingDE.

    Maus Koordinaten beim scrollen verschoben

    Hey Leute :),

    ich habe mir ein einfaches Usercontrol geschrieben auf welchem ich scrollen möchte. Das Problem ist, dass die Maus Koordinaten verschoben sind was man sieht wenn ich an der Mausposition z.B einen Punkt male.
    Wenn die Scrollbar ganz oben ist funktioniert das auch allerdings sobald ich runterscrolle ist die Position des schwarzen Punktes über der Maus.
    e.Graphics.TranslateTransform(control.AutoScrollPosition.X, control.AutoScrollPosition.Y) hat da leider keine Wirkung drauf.
    Hier der entsprechende Testcode:

    C#-Quellcode

    1. // _mousePosition wird beim MouseMove Event geändert.
    2. e.Graphics.TranslateTransform(editorPanel.AutoScrollPosition.X, editorPanel.AutoScrollPosition.Y);
    3. e.Graphics.FillEllipse(Brushes.Black, _mousePosition.X, _mousePosition.Y, 10, 10);


    Kann mir da jemand helfen?
    MfG, KaskadekingDE :)
    Bilder
    • bild1.png

      5,76 kB, 421×321, 111 mal angesehen
    • bild2.png

      5,8 kB, 333×502, 123 mal angesehen
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯

    KaskadekingDE schrieb:

    auf welchem ich scrollen möchte.
    Kannst Du mal das Projekt posten?
    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!
    Hier ein kleines Testprojekt wo das Problem reproduzierbar ist.
    (Ja ich weiß Timer sind nicht so toll aber hab ich reingemacht damit der Punkt sich mindestens bewegt)
    Dateien
    • ScrollTest.zip

      (13,8 kB, 125 mal heruntergeladen, zuletzt: )
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯

    KaskadekingDE schrieb:

    Testprojekt
    Weniger ist manchmal mehr:
    Spoiler anzeigen

    C#-Quellcode

    1. using System.Drawing;
    2. using System.Windows.Forms;
    3. namespace ScrollTest
    4. {
    5. public partial class Form1 : Form
    6. {
    7. private Point _mousePosition;
    8. public Form1()
    9. {
    10. InitializeComponent();
    11. }
    12. private void mousePoint_MouseMove(object sender, MouseEventArgs e)
    13. {
    14. _mousePosition = e.Location;
    15. mousePoint.Invalidate();
    16. }
    17. private void mousePoint_Paint(object sender, PaintEventArgs e)
    18. {
    19. e.Graphics.FillEllipse(Brushes.Black, _mousePosition.X, _mousePosition.Y, 10, 10);
    20. }
    21. }
    22. }
    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!
    Jetzt funktioniert es zumindestens genau da zu zeichnen wo die Maus ist aber ich hab noch folgendes Problem:
    Ich hab z.B ein grünes Dreieck und das wird derzeit beim scrollen mitbewegt aber das möchte ich nicht. Gibt es dafür auch ne Lösung?
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯

    KaskadekingDE schrieb:

    beim scrollen mitbewegt
    Malst Du das Dreieck im Paint-Event der Klasse MousePoint => es wird mitbewegt
    oder in der Klasse Form1 => nicht mitbewegt.
    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!

    KaskadekingDE schrieb:

    Wie kann ich den über das Form1 Paint-Event auf MousePoint zeichnen?
    So:
    Spoiler anzeigen

    C#-Quellcode

    1. public partial class Form1 : Form
    2. {
    3. private Point _mousePosition;
    4. public Form1()
    5. {
    6. InitializeComponent();
    7. }
    8. private void mousePoint_MouseMove(object sender, MouseEventArgs e)
    9. {
    10. _mousePosition = e.Location;
    11. mousePoint.Invalidate();
    12. }
    13. private void mousePoint_Paint(object sender, PaintEventArgs e)
    14. {
    15. // in Form-Koordinaten
    16. e.Graphics.DrawEllipse(Pens.Black, _mousePosition.X - 15, _mousePosition.Y - 15, 30, 30);
    17. // in Control-Koordinaten
    18. e.Graphics.TranslateTransform(mousePoint.AutoScrollPosition.X, mousePoint.AutoScrollPosition.Y);
    19. e.Graphics.FillEllipse(Brushes.Red, _mousePosition.X - 10, _mousePosition.Y - 10, 20, 20);
    20. }
    21. private void mouseTimer_Tick(object sender, EventArgs e)
    22. {
    23. mousePoint.Invalidate();
    24. }
    25. }

    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!
    Habs jetzt hinbekommen und hab alles in die OnPaint-Methode von MousePoint verlagert und jetzt wird es auch richtig gezeichnet. ^^
    (Das Dreieck passt sich jetzt nicht mehr der AutoScrollPosition an sondern wird halt dann über den Rand gezeichnet)
    Also ich wollte, dass es sich mitbewegt aber es hat sich vorher angepasst.
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯

    KaskadekingDE schrieb:

    Also ich wollte, dass es sich mitbewegt
    Wie nennst Du dies?
    Achte auf den roten Punkt, den schwarzen Kreis und die Scrollbar-Position:
    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!