Poruszanie buttonami w Windows Forms [C#]

0

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
4dr1anscreenshot-20211230213409.png

0

Na czym to przesuwanie ma polegac? Na kliknieciu w button i przesuwanie z wciśniętym przyciskiem myszy czy jakos inaczej?

0

Kiedy nacisnę przycisk myszy na button i trzymam go wciśniętego to mogę przesuwać button myszką

0

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-

0

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?

0

Każdy button może mieć tę samą metodę MouseMove itp. a to który button wywołuje zdarzenie dostajesz w parametrze object sender.

0

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ć?
screenshot-20211230221322.png

0

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.

0

Działa. Dzięki wszystkim za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1