This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: Controls auf einem Formular bewegen
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
In Foren als auch meiner Inbox taucht immer wieder die Frage auf, wie man denn bewegbare Controls erstellen kann, um beispielsweise ein Diagramm zu zeichnen etc. Deshalb möchte ich hier ein ganz kleines Beispiel zeigen, wie in zwei Minuten eine bewegliche Basisklasse für bewegliche Controls erstellt werden kann. Und hier kommt schon der Sourcecode:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace MoveableControlDemo
{
publicpartialclass MoveableBaseControl
: UserControl
{
privatebool _isMoving = false;
privateint _deltaX = 0;
privateint _deltaY = 0;
public MoveableBaseControl()
{
InitializeComponent();
}
privatevoid MoveableBaseControl_MouseDown(
object sender,
MouseEventArgs e)
{
_isMoving = true;
_deltaX = e.X;
_deltaY = e.Y;
}
privatevoid MoveableBaseControl_MouseUp(
object sender,
MouseEventArgs e)
{
_isMoving = false;
}
privatevoid MoveableBaseControl_MouseMove(
object sender,
MouseEventArgs e)
{
if (_isMoving && e.Button == MouseButtons.Left)
{
this.Location = new Point(
this.Location.X + (e.X - _deltaX),
this.Location.Y + (e.Y - _deltaY)
);
}
}
}
}
Im Grunde passiert nicht viel. Es wird lediglich festgehalten wann sich das Control bewegen soll und wann nicht (MouseDown und MouseUp). Bei einem MouseMove wird anschließend die Position des Controls berechnet. Zu beachten ist hier nur, dass die MouseEventArgs die Position des Cursors innerhalb des Controls angibt und nicht auf Formular- bzw. Screen-Basis. Daher muss das Delta zum Rand des Controls beim MouseDown festgehalten werden, um dies später in die Berechnung einfließen zu lassen.
Dieses Control kann sozusagen als ein Basis-Control verwendet werden. Zum Test einfach in ein Projekt einbauen, auf ein Formular ziehen, Anwendung starten und mit der Maus über das Formular bewegen.