Wie zu zeichnen und zu bewegen Formen mit der Maus in C#
Ich bin neu in der Programmierung in C# und wollte mal Fragen, für ein bisschen Hilfe. Ich bin derzeit versuchen zu bewegen eine Farbe gefülltes Rechteck, zeichne ich auf einem Windows-Formular mit meiner linken Maus-Knopf, und ich bin versucht zu drag-und-drop an eine andere Position mit der rechten Maustaste. Derzeit habe ich es geschafft um das Rechteck zu zeichnen, aber die Rechte Maustaste ist, ziehen Sie die gesamte form zusammen.
Hier ist mein code:
public partial class Form1 : Form
{
private Point MouseDownLocation;
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;
}
Rectangle rec = new Rectangle(0, 0, 0, 0);
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.DeepSkyBlue, rec);
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
rec = new Rectangle(e.X, e.Y, 0, 0);
Invalidate();
}
if (e.Button == MouseButtons.Right)
{
MouseDownLocation = e.Location;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
rec.Width = e.X - rec.X;
rec.Height = e.Y - rec.Y;
Invalidate();
}
if (e.Button == MouseButtons.Right)
{
this.Left = e.X + this.Left - MouseDownLocation.X;
this.Top = e.Y + this.Top - MouseDownLocation.Y;
}
}
}
Brauche ich nur um die drag-und-drop die Rechtecke mit der rechten Maus-Taste.
BEARBEITEN: Dank an Euch alle, ich habe meine Antwort sehr schnell und hier ist der code, der funktioniert:
public partial class Form1 : Form
{
private Point MouseDownLocation;
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;
}
Rectangle rec = new Rectangle(0, 0, 0, 0);
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.DeepSkyBlue, rec);
//Generates the shape
}
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
//can also use this one:
//if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
rec = new Rectangle(e.X, e.Y, 0, 0);
Invalidate();
}
if (e.Button == MouseButtons.Right)
{
MouseDownLocation = e.Location;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
rec.Width = e.X - rec.X;
rec.Height = e.Y - rec.Y;
this.Invalidate();
}
if (e.Button == MouseButtons.Right)
{
rec.Location = new Point((e.X - MouseDownLocation.X) + rec.Left, (e.Y - MouseDownLocation.Y) + rec.Top);
MouseDownLocation = e.Location;
this.Invalidate();
}
}
}
InformationsquelleAutor User_T | 2013-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese scheint zu funktionieren
InformationsquelleAutor PLED
versuchen, diese :
Beachten Sie, dass ich hinzufügen timer auf die form, die in dieser Methode brauchen Sie nicht zu nennen
Entkräften auf Maus-Ereignis der timertick ist der Aufruf der Refresh () - also die form
Malt sich in jedem tick..
Auf WinForms gehen Sie in die Entwurfsansicht und ziehen Sie timer-Steuerelement auf Ihre form nach, dass Sie sehen, dass es unten aus, um die timerTick Methode, doppelklicken Sie einfach darauf klicken, können Sie die Stoppuhr starten, wenn das Formular geladen ist oder auf der form c ' Tor, mit timer.Start() oder timer.Enabled = true, wenn Sie möchten, stoppen Sie den timer Sie können den timer verwenden.Beenden() oder timer.Enabled = false
Ich habe alles getan, was jetzt ist und das Programm startet, aber es ist keine Zeichnung, nichts
es funktioniert gut für mich..
es muss nicht alles zeichnen zu beginnen, weil das erste Rechteck die Breite und Höhe 0 sind , müssen Sie drücken Sie die linke Taste und bewegen Sie die Maus zum ändern der Breite und Höhe des Rechtecks und die es zeichne das Rechteck
InformationsquelleAutor Elior