Как узнать объект вызвавший событие DropDown

160
13 февраля 2018, 05:08

Суть в том, что у меня 18 изображений. Первые 9 - сетка (1-9), другие 9 - кусочки одного изображения (10-18). Мне надо, чтобы перетаскиваемый кусок изображения вставал в то же положение, что и, сетка на которую дропнулось изображение (игра пазл). Я знаю, что есть sender в событии dropdown сетки (первых 9 изображений). Но здесь я не понимаю одного... Почему он возвращает имя объекта на которое падает изображение, а не имя падающего изображения, вызывает же событие dragdrop именно падающее изображение, а не принимающее. В Delphi, помимо sender, была ещё одна переменная Source, которая как раз показывала тот объект, который активирует событие. Может быть есть такой же в C#?

private void pictureBox1_DragDrop(object sender, DragEventArgs e)
    {
        /* if (sender is PictureBox)
         {
             pictureBox10.Location = (sender as PictureBox).Location;
             (sender as PictureBox).Location = 
         }
        */
        PictureBox picture = e.Data.GetData(typeof(PictureBox)) as PictureBox;

            MessageBox.Show(Convert.ToString(picture));
    }

Я пытался сделать проверку на то, что получу, но в итоге выводится пустой MessageBox

Answer 1

Надеюсь, что мой пример (там источник данных TreeView ) даст Вам подсказку (с PictureBox все точно также по этой схеме)

     private void lstBxRegionsForSearch_DragDrop(object sender, DragEventArgs e)
     {
         //Анализируем, что принесли на мыше
         TreeNode node = e.Data.GetData(typeof(TreeNode)) as TreeNode;
         if (node == null) return;
         //Дальше Ваши действия с объектом node (у Вас это будет конкретный pictureBox 
         .......
     }
     lstBxRegionsForSearch - это приемник, который обрабатывает событие DragDrop
READ ALSO
Синхронизация потоков примитивами

Синхронизация потоков примитивами

Рихтер в своей книге пишут, что использование примитивов режима ядра снижает производительность из-за доступа из управляемого кода в неуправляемый

167
Цикл(ы) в switch case

Цикл(ы) в switch case

как переделать эту часть, чтобы было бы вот так: switch (num)

175
выход из команды “node node_modules/webpack/bin/webpack.js --env.prod” с кодом 2

выход из команды “node node_modules/webpack/bin/webpack.js --env.prod” с кодом 2

Чтобы я не делал у меня не получается опубликовать приложениеРаботаю в Visual Studio 2017, использовал встроенный шаблон Angular

322
Доступ между формами в C# [требует правки]

Доступ между формами в C# [требует правки]

Как организовать доступ между двумя формами в C#, не нарушая инкапуляцию?

168