Button bewegen

Darkas

Erfahrenes Mitglied
Ich suche nach einer möglichkeit ein Steuerelement (in diesem Fall ein Button) zur Laufzeit des Programmes mit der Maus bewegen zu können (dafür soll er aber nicht anklickbar sein)
 
Hallo,
hab jetzt hier an der Arbeit keine Entwicklungsumgebung installiert, aber mit folgendem Code sollte es eigentlich funktionieren:

Code:
bool drag;

void Button1MouseDown(object sender, MouseEventArgs e)
{
	drag = true;
}
		
void Button1MouseMove(object sender, MouseEventArgs e)
{
	if(drag == true)
	{
		button1.Top = e.Y;
		button1.Left = e.X;
	}			
}
		
void Button1MouseUp(object sender, MouseEventArgs e)
{
	drag = false;
}

Keine Garantie dass es läuft ist nur ein Denkanstoß :)

Gruss
Konstantin
 
Ja, im gegebenen Beispiel wird die aktuelle Mausposition als Top bzw. Left gesetzt. Klickst du nun in die Mitte des Buttons, wandert dieser nach rechts. Weil eben die Differenz zwischen Mausposition und Top bzw. Left (also die Location) des Buttons nicht miteinbezogen wurde.
 
Hallo Norbert,
danke, daran hab ich jetzt nicht gedacht, kann das ganze halt schlecht testen ohne Entwicklungsumgebung :rolleyes: Habs mal umgebastelt ich vermute das es jetzt richtig sein sollte:

Code:
bool drag = false; 
int newX,newY,oldX,oldY;

void Button1MouseDown(object sender, MouseEventArgs e)
{
	drag = true;
}

void Button1MouseMove(object sender, MouseEventArgs e)
{
	if(!drag)
	{
		oldX = e.X;
		oldY = e.Y;
	}

	newY = newY + e.X - oldX;
	newX = newX + e.Y - oldY;

	button1.Top = newX;
	button1.Left = newY;
}

void Button1MouseUp(object sender, MouseEventArgs e)
{
	drag = false;
}

Gruss
Konstantin
 
ich habe mir jetzt eine Klasse daraus gemacht

Code:
class moveable_Button : System.Windows.Forms.Button
        {
            bool isMoveable = false;
            int newX,newY,oldX,oldY;

            public moveable_Button()
            {
                this.AutoSize = true;
                this.Enabled = false;
                this.Location = new System.Drawing.Point(13, 13);
                this.Name = "button2";
                this.RightToLeft = System.Windows.Forms.RightToLeft.No;
                this.Size = new System.Drawing.Size(75, 23);
                this.TabIndex = 2;
                this.Text = "button2";
                this.UseVisualStyleBackColor = true;
                this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.move);
                this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.mousedown);
                this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.mouseup);
            }

            private void mousedown(object sender, MouseEventArgs e)
            {
                isMoveable = true;
            }

            private void move(object sender, MouseEventArgs e)
            {
                if (isMoveable == true)
                {
                    newY = newY + e.X - oldX;
	    newX = newX + e.Y - oldY;

	    button1.Top = newX;
	    button1.Left = newY;

                }
            }

            private void mouseup(object sender, MouseEventArgs e)
            {
                isMoveable = false;
                oldX = e.X;
                oldY = e.Y;
            }
        }

ich initialisiere mir dann mit

Code:
Moonlight.DatabaseDesigner.moveable_Button Button2 = new moveable_Button();

den button, aber es wird nichts angezeigt....

wüsstet ihr da eine Lösung?
 
Zuletzt bearbeitet:
das braucht aber unmenschlich viel Speicher, da das ja immer wenn man die Maus bewegt die Werte Aktualisiert.

In dem Fall sollte man

Code:
oldX = e.X;
oldY = e.Y;

bei Button1MouseUp unten dranhängen
 

Neue Beiträge

Zurück