Перемещение изображений без создания PictureBox_MouseDown для каждого

У меня много ящиков с изображениями, которые я хочу перемещать по отдельности. Создание метода MouseDown для каждого изображения будет запутанным.

Есть ли способ получить имя окна изображения, на которое я нажимаю, и переместить его в следующее место, на которое я нажимаю? Или пусть он следует за мышью на MouseDown и отбрасывается, если это лучше.

Спасибо


person Pandara    schedule 15.10.2018    source источник
comment
Пусть все они используют один и тот же метод MouseDown и используют параметр отправителя, чтобы выяснить, какой из них вызывает его.   -  person LarsTech    schedule 16.10.2018


Ответы (2)


Используйте один и тот же метод для всех:

private void PictureBox_MouseDown(object sender, MouseEventArgs e)
{
    var pictureBoxName = (sender as PictureBox).Name;
    // ...
}
person Majdi Saibi    schedule 15.10.2018
comment
Забыл добавить. Как я могу отредактировать BackColor для этого изображения, когда у меня есть только строка? - person Pandara; 16.10.2018
comment
PictureBox.BackColor = Color.FromArgb(255, 255, 0) - person Majdi Saibi; 16.10.2018

Добавлять

        HookEvents( this );

на Form_Load()

После этого нужно добавить это

    private void HookEvents( Control Parent )
    {
        foreach ( Control Child in Parent.Controls )
        {
            if ( Child is PictureBox )
            {
                Child.MouseDown += new EventHandler( OnPictureBoxMouseDown );
                if ( Child.Controls.Count > 0 )
                {
                    HookEvents( Child );
                }
            }
        }
    }

И добавить (можно добавить как частное и т. д., просто я предпочитаю использовать публичный)

public void OnPictureBoxMouseDown( object sender, EventArgs e ) {
// blah blah
}
person Arphile    schedule 15.10.2018