TextBox mit Maus bewegen

Alphamännchen

Mitglied
Wie kann man eine TextBox nur bei gedrückter Maustatse auf der Form bewegen?
Mit Hilfe der Tasten ist mir dies bereits gelungen (Strg + Pfeiltatsen), aber mit der Maus scheint das ganze ein wenig schwieriger zu sein.

Hat das ganze was mit dem DRAG Ereignis zu tun, oder fängt man die Aktion über MouseDown ab?

Hat schon mal jemand damit zu tun gehabt?
 
also ich hab so was schon mal in java gemacht, vielleicht kannste ja was abkupfern:

Code:
public class ComponentMover extends MouseAdapter implements MouseMotionListener
{
	private int clickX, clickY;
	private boolean move = false;
	
	public void mousePressed(MouseEvent event)
	{
		clickX = event.getX();
		clickY = event.getY();
		if(clickY <= 30)
		{
			this.move = true;
		}
	}
	public void mouseReleased(MouseEvent arg0)
	{
		this.move = false;
	}
	public void mouseDragged(MouseEvent event)
	{
		if(this.move)
		{		 
			event.getComponent().requestFocus();
			int xmoved = event.getX() - clickX;
			int ymoved = event.getY() - clickY;
			event.getComponent().setLocation(
				event.getComponent().getX() + xmoved,
				event.getComponent().getY() + ymoved);
		}
	}
	public void mouseMoved(MouseEvent arg0){}
}

gruss kahuna
 
Zuletzt bearbeitet:
Also manchmal muss ich mich wirklich selber über mich wundern ... Nach einigem Hin und her, habe ich doch tatsächlich selber eine Lösung gefunden (naja, ein wenig Internet-Hilfe war schon von nöten). Keine Ahnung ob diese optimal ist, aber für all diejenigen unter euch, die schon immer mal eine TextBox auf dem Bildschirm verschieben wollten hier nun meine Lösung:

Code:
		private bool LinkeMaustasteGedrueckt = false;
		private int MausPosX = 0;
		private int MausPosY = 0;

		private void textBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if (e.Button == MouseButtons.Left)
			{
				MausPosX = e.X;
				MausPosY = e.Y;
				LinkeMaustasteGedrueckt = true;
			}
		}

		private void textBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if (LinkeMaustasteGedrueckt)
			{
				textBox1.Location = new Point (textBox1.Location.X+(e.X-MausPosX), textBox1.Location.Y+(e.Y-MausPosY));
			}
		}

		private void textBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			LinkeMaustasteGedrueckt = false;
		}

Aber vielleicht kennt ihr ja eine optimalere Variante?
 
Zurück