Cursorposition mitschreiben

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von X-Zat.

    Cursorposition mitschreiben

    Hallo Forum,

    ich würde gerne meine angezeigten Cursorkoordinaten, in meiner Picturebox, in einem Textfeld speichern. Sprich, die Koordinaten die ich mit einem Mausklick aufrufe sollen in einem Textfeld mitgeschrieben werden. Gibt es eine Möglichkeit dieses umzusetzen?

    Mfg und Danke im Voraus
    Sowas?


    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Timer1.Start()
    3. End Sub


    VB.NET-Quellcode

    1. ​Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. Dim MousePosition As Point
    3. MousePosition = Cursor.Position
    4. Label1.Text = (MousePosition.ToString)
    5. End Sub


    VB.NET-Quellcode

    1. ​Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Button1.Text = Label1.Text
    3. End Sub
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Oder eine Spur schlanker:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
    2. TextBox1.Text = (e.X + PictureBox1.Left + Me.Left).ToString
    3. TextBox2.Text = (e.Y + PictureBox1.Top + Me.Top).ToString
    4. End Sub

    • e.X, e.Y sind die Mauscursorpositionen innerhalb der PicBox
    • PictureBox1.Left, Top dazu -> absolute Position innerhalb der Form
    • Me.Left, Top dazu -> Absolutangabe auf dem aktuellen Bildschirm

    [=====]

    EDIT: Oder noch allgemeiner:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
    2. Dim CurrentControl = DirectCast(sender, Control)
    3. Dim AbsoluteX = e.X, AbsoluteY = e.Y
    4. Do
    5. AbsoluteX += CurrentControl.Left
    6. AbsoluteY += CurrentControl.Top
    7. CurrentControl = CurrentControl.Parent
    8. Loop Until CurrentControl Is Nothing
    9. TextBox1.Text = AbsoluteX.ToString
    10. TextBox2.Text = AbsoluteY.ToString
    11. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Vielen Dank für die schnellen und sachlichen Antworten,
    beide Versionen funktionieren wunderbar.

    Allerdings würde ich die koordinaten gerne gespeichert bekommen. Sprich jeder Klick wird protokolliert und ich kann sie am Ende alle sehen.
    Ich programmiere Werkzeugmaschinen, und wenn wir beim Fräsen eine Kontur abfahren, benötigen wir viele Koordinaten. Somit könnte ich einfach die wichtigsten Konturpunkte anklicken und mit den gespeicherten Koordinaten arbeiten. Ich hoffe ich habe euch nicht zu sehr verwirrt :D

    Bei der jetzigen Version von Vapori verschwinden dieja alten Koordinaten wenn man einen erneuten Mausklick macht, diese hätte ich allerdings gerne mitgeschrieben.
    Öhm ... wieviel Erfahrung hast Du mit VB.Net-programmieren?
    Die naheliegende Lösung wäre, dass Du in der Form eine Listenvariable machst: Private ListOfCoordinates = New List(Of Point)
    Und dann in der PictureBox1_Click-Sub statt die Koordinaten in TextBoxen umzuleiten (ok, das könnte natürlich auch beibehalten werden) eben ListOfCoordinates.Add(e.Location) schreibst. So landen alle Koordinaten in einer Liste, mit der Du dann später machen kannst, was Du willst. Die Koordinaten werden also (zwischen)gespeichert. Ggf. permanentes Speichern auf Festplatte muss später noch implementiert werden. Du weißt, wie das geht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das ist recht einfach. entweder du nimmst eine Listbox statt einer Textbox

    VB.NET-Quellcode

    1. Listbox1.items.add(e.x & ";" & e.x)


    Hier werden die beiden Koordinaten dir ein Semikolon getrennt in einer Listbox aufgelistet

    Danach musst du zum speichern in eine Textdatei nur noch Zeile für Zeile in der Listbox durchgehen und in eine Textdatei speichern.
    Das komplette Projekt könnte z.B so aussehen:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
    2. ListBox1.Items.Add(e.X & ";" & e.Y)
    3. Label1.Text = e.X & ";" & e.Y
    4. End Sub
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim sfd As New SaveFileDialog
    7. sfd.Title = "Datei speichern"
    8. sfd.Filter = "Textdateien|*.txt"
    9. If sfd.ShowDialog = DialogResult.OK Then
    10. If sfd.FileName.EndsWith(".txt") Then
    11. speichern(sfd.FileName)
    12. Else
    13. speichern(sfd.FileName & ".txt")
    14. End If
    15. End If
    16. End Sub
    17. Private Sub speichern(ByVal filename As String)
    18. Dim sw As StreamWriter = New StreamWriter(filename)
    19. For Each s As String In ListBox1.Items
    20. sw.WriteLine(s)
    21. Next
    22. sw.Close()
    23. MessageBox.Show("Datei gespeichert!")
    24. End Sub
    @Fräser: Wenn Du frisch dabei bist, nimm Dir gleich eines zu Herzen: Die CEs (wie ListBox, TextBox, DataGridView (DGV), ...) sind dafür da, um Werte darzustellen, vielleicht noch, um sie zu manipulieren (TextBox), aber nicht, um Daten zu speichern. Spätestens dann, wenn Du mit den Koordinaten irgendwas machen willst (bearbeiten, tauschen, sortieren, wasauchimmer), wird es Dir zum Verhängnis, den ganzen Kram nur in ner ListBox zu haben, wo die Werte zu irgendwie-Strings zusammengeschmolzen sind. Dafür sind Variablen, Listen, Felder da, wie von mir in Post#6 erwähnt. Spätestens dann, wenn Du die Koordinaten aus der Datei lädst und sie dann Deinem Fräsgerät weiterreichen willst, kommst Du in die Verlegenheit, erstmal irgendwelche ListBox-Strings zu splitten, um an Deine Daten zu kommen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    @Fräser: Wenn Du frisch dabei bist, nimm Dir gleich eines zu Herzen: Die CEs (wie ListBox, TextBox, DataGridView (DGV), ...) sind dafür da, um Werte darzustellen, vielleicht noch, um sie zu manipulieren (TextBox), aber nicht, um Daten zu speichern. Spätestens dann, wenn Du mit den Koordinaten irgendwas machen willst (bearbeiten, tauschen, sortieren, wasauchimmer), wird es Dir zum Verhängnis, den ganzen Kram nur in ner ListBox zu haben, wo die Werte zu irgendwie-Strings zusammengeschmolzen sind. Dafür sind Variablen, Listen, Felder da, wie von mir in Post#6 erwähnt. Spätestens dann, wenn Du die Koordinaten aus der Datei lädst und sie dann Deinem Fräsgerät weiterreichen willst, kommst Du in die Verlegenheit, erstmal irgendwelche ListBox-Strings zu splitten, um an Deine Daten zu kommen.


    Das ist vollkommen richtig. Ich habe es in dem Beispiel nur desswegen so gemacht weil ich dem TE nicht mit der Erstellung eigener Objekte oder dem Nutzen von Point Datentypen, Strukturen oder sonstigen Möglichkeiten die es gibt verwirren wollte. Zudem ist die Koordinatentrennung durch Senikolns zumindest soweit ich das noch dunkel in Erinnerung habe bei Fräsmaschinen sowiso ganz und gebe.

    Rein Programmier bzw Datentechnisch gesehen ist mein Code bestenfalls unelegant