Witam,
mam stworzone okno w C# (.NET) i Windows Forms okno i chcę uzyskać taki efekt, abym mógł myszką przesuwać wstawione buttony (może być to też inny obiekt, np. PictureBox).
Z góry dziękuję
Pozdrawiam
4dr1an
Na czym to przesuwanie ma polegac? Na kliknieciu w button i przesuwanie z wciśniętym przyciskiem myszy czy jakos inaczej?
Kiedy nacisnę przycisk myszy na button i trzymam go wciśniętego to mogę przesuwać button myszką
Coś takiego Ci chodzi po głowie?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Point MouseDownLocation;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
MouseDownLocation = e.Location;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
pictureBox1.Left = e.X + pictureBox1.Left - MouseDownLocation.X;
pictureBox1.Top = e.Y + pictureBox1.Top - MouseDownLocation.Y;
}
}
}
*
Czy tutaj
https://thecodeprogram.com/how-to-move-a-component-with-mouse-on-winforms-with-c-
Właśnie o coś takiego mi chodziło, tylko w tym jest problem, tych obiektów będzie dużo i wtedy musiałbym do każdego obiektu pictureBox1, pictureBox2, pictureBox3, pictureBox4 itp. tworzyć kod. Nie dało by się zrobić tego kodu do ogólnie Klasy Button lub PictureBox?
Każdy button może mieć tę samą metodę MouseMove itp. a to który button wywołuje zdarzenie dostajesz w parametrze object sender
.
private void MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
MouseDownLocation = e.Location;
}
}
private void MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
sender.Left = e.X + sender.Left - MouseDownLocation.X;
sender.Top = e.Y + sender.Top - MouseDownLocation.Y;
}
}
tak ma to wyglądać?
sender.Left = e.X + sender.Left - MouseDownLocation.X;
To ci się nie skompiluje bo sender
jest typu object
który nie ma pola Left
. Najpierw go zrzutuj na Button
.
(sender as Button).Left
na przykład.
Działa. Dzięki wszystkim za pomoc :)