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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2018, 16:56   #1
Anton_Jag
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 41
По умолчанию Перетаскивание picturebox

Пишу аналог paint. реализовываю функцию копировать выделенное и затем вставить. при вставке создаю внутри главного picturebox новый и в него загружаю картинку. вешаю на него mousedown и mousemove где соот. запоминаю координаты бокса и координаты мыши и во второй задаю новые координаты бокса. Однако при перетаскивании бокс начинает дрожать, прыгать. А хочется чтобы как в пейнте.
Код:
   private void вставитьToolStripMenuItem_Click(object sender, EventArgs e)
        {// если в буфера есть картинка
            if (Clipboard.ContainsImage()) {
                // создаем новый контейнердля картинки из буфера чтобы его перемещать
                Bitmap Paste = new Bitmap(Clipboard.GetImage());
                PictureBox tmpPB = new PictureBox();
                tmpPB.Name = "tmpPB";
                ((Control)tmpPB).AllowDrop = true;
                tmpPB.Location = new Point(0, 0);
                tmpPB.Size = new Size(Paste.Size.Width, Paste.Size.Height);
                tmpPB.Image = Paste;
                pictureBox1.Controls.Add(tmpPB);//добавляем на основной контейнер
                tmpPB.Invalidate();
                tmpPB.MouseMove += new MouseEventHandler(pasteMove);//функция перемещения мыши
                tmpPB.MouseDown += new MouseEventHandler(tmpPB_MouseDown);
                Rect.Size = new System.Drawing.Size(0, 0);
                вырезатьToolStripMenuItem.Enabled = false;
                копироватьToolStripMenuItem.Enabled = false;               
            }
        }

 private void pasteMove(object sender, MouseEventArgs e) {
            if (e.Button == MouseButtons.Left)
            {
        
                PictureBox tmpPB = (PictureBox)sender;
                tmpPB.Location = new Point((PastePoint.X + (e.Location.X - PreviousPointPaste.X)), (PastePoint.Y + (e.Location.Y - PreviousPointPaste.Y)));
                tmpPB.Invalidate();
            }
        }

        private void tmpPB_MouseDown(object sender, MouseEventArgs e) {
            PastePoint = (sender as PictureBox).Location;
            PreviousPointPaste = e.Location;
        }
добавил в событие mousemove
this.Text = tmpPB.Location.ToString();
оказалось что даже когда перестаю передвигать мышкой но жму левую кнопку все равно выполняется.

Последний раз редактировалось Anton_Jag; 03.11.2018 в 17:23.
Anton_Jag вне форума Ответить с цитированием
Старый 24.11.2018, 20:43   #2
Nintra GrayWorker
Пользователь
 
Регистрация: 19.10.2018
Сообщений: 72
По умолчанию

Цитата:
Сообщение от Anton_Jag Посмотреть сообщение
при вставке создаю внутри главного picturebox новый и в него загружаю картинку.
Тупо. Есть this.ClipBoard или что-то типа того - куда помещаем картинку(реагирует ч\з стандартные сочетания клавиш копирования-вставки).
Тебе, Друг, нужно для перетаскивания обрабатывать события MouseLive и MouseEnter.
Nintra GrayWorker вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перетаскивание Drulya C# (си шарп) 0 15.09.2011 16:51
Перетаскивание image(a) dmitriegorovih Общие вопросы Delphi 19 22.08.2010 21:51
Перетаскивание формы. IVANSour Общие вопросы Delphi 2 03.02.2009 22:06
Перетаскивание форм Dr.Badnezz Общие вопросы Delphi 4 30.01.2009 10:23
Перетаскивание geniy Компоненты Delphi 9 12.01.2009 02:10