Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2014, 09:15   #1
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию PictureBox - Drag and Drop, отображение во время перетаскивания

Всем Привет!
Код:
   public partial class Form1 : Form
   {
       PictureBox[] WS_Image;
 
       public Form1()
       {
           InitializeComponent();
 
           //разрешаем DragDrop
           panel2.AllowDrop = true;
           //подписываемся на события
           panel2.DragEnter += new DragEventHandler(PanelDragEnter1);
           panel2.DragDrop += new DragEventHandler(PanelDragDrop1);
       }
 
       //проверяем тип данных на соответствие PictureBox-у
       void btn_MouseMove1(object sender, MouseEventArgs e)
       {
           if (e.Button == MouseButtons.Left)
           {
               PictureBox pb = sender as PictureBox;
               pb.Tag = new Point(e.X, e.Y);
               //запоминаем координаты мыши на момент начала перетаскивания
               pb.DoDragDrop(sender, DragDropEffects.Move);
           }
       }
       void PanelDragEnter1(object sender, DragEventArgs e)
       {
           if (e.Data.GetDataPresent(typeof(PictureBox)))
           {
               e.Effect = DragDropEffects.Move;
           }
       }
       void PanelDragDrop1(object sender, DragEventArgs e)
       {
           //извлекаем PictureBox
           PictureBox pb = (PictureBox)e.Data.GetData(typeof(PictureBox));
           Panel pan = sender as Panel;
           //получаем клиентские координаты в момент отпускания кнопки
           Point pointDrop = pan.PointToClient(new Point(e.X, e.Y));
           //извлекаем клиентские координаты мыши в момент начала перетскивания
           Point pointDrag = (Point)pb.Tag;
           //вычисляем и устанавливаем Location для PictureBox в Panel
           pointDrop.Offset(-pointDrag.X, -pointDrag.Y);
           pb.Location = pointDrop;
           pb.Parent = pan;
           label_Test1.Text = pb.Name; 
       }
 
       private void Create_WS_Imege(object sender, EventArgs e)
       {
           if (WS_Image == null) WS_Image = new PictureBox[1]; else WS_Image = new PictureBox[WS_Image.Length + 1];
           for (int i = WS_Image.Length -1; i < WS_Image.Length; i++)
           {
               WS_Image[i] = new PictureBox();
               WS_Image[i].Tag = i;
               WS_Image[i].Size = new Size(32, 32);
               WS_Image[i].Location = new Point(5, 5 + i * (WS_Image[i].Height + 5));
               WS_Image[i].Image = imageList1.Images[0];
               WS_Image[i].Name = "Image - " + i.ToString();
               WS_Image[i].Cursor = Cursors.Hand;
               panel2.Controls.Add(WS_Image[i]);
               WS_Image[i].MouseMove += new MouseEventHandler(btn_MouseMove1);
               WS_Image[i].Click += delegate(object s, EventArgs args)
               {
                   PictureBox pb = (PictureBox)s;
                   label_Test1.Text = pb.Name;
                   //pb.BorderStyle = BorderStyle.FixedSingle;
 
                   //var PictureBox = s as PictureBox;
                   //label_Test1.Text = PictureBox.Tag.ToString();
               };
           }
       }
 
       private void button1_Click(object sender, EventArgs e)
       {
           Create_WS_Imege(sender, e);
       }
 
   }
Все работает, создаются объекты, тягаются, все красиво, вопрос:
во время перетаскивания НЕ отображается содержимое(картинка) PictureBox-а, наверника можно сделать так чтоб во время перетаскивания было видно содержимое(картинку) PictureBox-а

Я не гуру и сам этого сделать не могу, перерыл инет, не нашел (либо руки криво под гугл заточены), допилите, пожалуйста, код
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag and drop c# katbka Помощь студентам 1 05.03.2012 05:09
drag and drop digital-stream Общие вопросы Delphi 2 11.07.2011 18:26
drag and drop kelty Помощь студентам 0 11.09.2009 23:00
Drag and Drop nusik Общие вопросы C/C++ 2 09.07.2009 11:09
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15