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
Poruszanie buttonami w Windows Forms [C#]
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
- Rejestracja: dni
- Ostatnio: dni
- Postów: 935
Na czym to przesuwanie ma polegac? Na kliknieciu w button i przesuwanie z wciśniętym przyciskiem myszy czy jakos inaczej?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
Kiedy nacisnę przycisk myszy na button i trzymam go wciśniętego to mogę przesuwać button myszką
- Rejestracja: dni
- Ostatnio: dni
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-
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
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?
- Rejestracja: dni
- Ostatnio: dni
Każdy button może mieć tę samą metodę MouseMove itp. a to który button wywołuje zdarzenie dostajesz w parametrze object sender.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 29
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ć?

- Rejestracja: dni
- Ostatnio: dni
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.