WedX - журнал о программировании и компьютерных науках

Перетащите положение? Как использовать прямоугольник? Винформс, С#

Перетаскивание в winform возвращает сброшенное в крайнее левое положение на его Drop. Или, чтобы было понятно, он падает туда, где находится курсор мыши. Я знаю, что мне нужно добавить некоторые коды, такие как прямоугольник. Но я новичок в этой функции перетаскивания. Может ли кто-нибудь помочь мне, пожалуйста? Вот мой код:

private void label1_MouseDown(object sender, MouseEventArgs e)
{
   label1.DoDragDrop(label1, DragDropEffects.Move);           
}

private void panel1_DragDrop(object sender, DragEventArgs e)
{
   label1.Location = this.panel1.PointToClient(new Point(e.X, e.Y));
}

private void panel1_DragEnter(object sender, DragEventArgs e)
{
   e.Effect = DragDropEffects.Move;
}

  • Непонятно, чего вы пытаетесь добиться, можете ли вы объяснить, пожалуйста? 28.05.2013
  • Да в чем вопрос? Помочь в чем именно? 28.05.2013
  • например, я нацеливаюсь на перетаскивание в середине метки, оно опускает самый верхний левый край метки, где находится курсор. 28.05.2013
  • Я понимаю эту часть, но что бы вы хотели, чтобы она делала вместо этого? Куда это должно идти? Что вы ожидаете, что не происходит? 28.05.2013
  • скажем, я щелкаю по нему в середине метки, а затем перетаскиваю, после опускания я хочу, чтобы курсор мыши все еще находился в середине метки, а не в самом верхнем левом углу метки. 28.05.2013
  • Я думаю, что это как-то связано с этим: label1.Location = this.panel1.PointToClient(new Point(e.X, e.Y)); 28.05.2013
  • Я попробовал этот, и он падает в середине этикетки. Это похоже на это, но это не то, что я хочу: label1.Location = this.panel1.PointToClient(new Point(eX - label1.Width/2, eY - label1.Height/2)); 28.05.2013
  • Хорошо, вот так. Рассмотрите возможность перетаскивания в WinForm Design. Когда мы перетаскиваем элемент управления, он падает туда, куда я указываю (с помощью мыши) перетаскивание. 28.05.2013
  • Во всяком случае, я нашел его. Вот ссылка, которую я нашел: stackoverflow.com/questions/2703132/ 28.05.2013

Ответы:


1

Это вверху слева, потому что label1.Location = this.panel1.PointToClient(new Point(e.X, e.Y)); задает положение верхнего левого угла. Попробуйте получить местоположение мыши относительно перетаскиваемого элемента и вычесть эти координаты.

private void panel1_DragDrop(object sender, DragEventArgs e)
{
   //Gives you the position of the mouse relative to the top left of panel1
   point offset = e.GetPosition(panel1); 
   label1.Location = this.panel1.PointToClient(new Point(e.X-offset.X, e.Y-offset.Y));
}
10.12.2014
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]