Member 14630006 Ответов: 2

Как сделать переместить ярлык в панели только


я хочу сделать 60 меток перемещающимися внутри панели я попробовал код это все еще когда пользователь нажимает hold и перетаскивает метку внутри панели это нормально но когда вы получаете метку из боковой панели метка исчезает в форме

Что я уже пробовал:

private void lbl29_MouseDown(object sender, MouseEventArgs e)
       {
           if (e.Button == System.Windows.Forms.MouseButtons.Left)
           {
               MouseDownLocation = e.Location;
               panel1.Invalidate();

           }
       }

       private void lbl29_MouseMove(object sender, MouseEventArgs e)
       {
           if (e.Button == System.Windows.Forms.MouseButtons.Left)
           {
               lbl29.Left = e.X + lbl29.Left - MouseDownLocation.X;
               lbl29.Top = e.Y + lbl29.Top - MouseDownLocation.Y;
           }
       }

Richard MacCutchan

Я показал вам, что нужно делать в вашем первоначальном вопросе. Почему вы открыли еще один с тем же вопросом?

2 Ответов

Рейтинг:
2

OriginalGriff

Он не "исчезает в форме", а остается там, где был - частью панели, просто его координаты находятся за пределами видимой области панели.
Когда метка является частью панели, она хранится в панели.Управляет коллекцией, так же как и сама панель хранится как часть коллекции Form.Controls. Когда вы перетаскиваете метку за пределы панели, это автоматически не меняет ее "родительский элемент управления", а просто устанавливает "невидимую координату".

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


Member 14630006

то, что я пытаюсь сделать, - это заставить метку двигаться внутри границ панели

Рейтинг:
1

Dave Kreskowiak

Я уже говорил вам, как это сделать, в моей статье, которая описывает именно это. Я поместил ссылку в свой ответ на предыдущий пост этого вопроса.

Ну и что с того, что код написан в VB.NET-что? Код легко конвертируется в C#.

Концепции, необходимые для этого, изложены в статье, если вы потрудитесь прочитать ее, так что вы можете создать свои собственные элементы управления для этого.

Если вы ищете блок кода "copy'n'paste", чтобы сделать эту работу, вы его не найдете. Сделав это, вы просто станете копи-Н-Пастером, а не тем, кто действительно знает, как писать код.


Member 14630006

это другой вопрос Дорогой Дэйв а в visual basic есть обработчик который не существует на c#

Dave Kreskowiak

Комментарии не отображаются в QA прямо сейчас, но из вашей электронной почты, нет, это не другой вопрос.

Решение проблемы "исчезновения" элементов управления рассмотрено в моей статье.

И опять же, код конвертируется в C#. Все, что вы делаете, - это создаете свой собственный элемент управления, используя существующий элемент управления Label для наследования.

Если вы не знаете, как создавать свои собственные события в C#, я предлагаю вам посмотреть его.

Member 14630006

есть ли StayWithinParentBounds в c#? Я не могу найти его поэтому я спрашиваю есть ли другой способ

Richard MacCutchan

#Мету.

Dave Kreskowiak

Нет, нет никакого "StayWithinParentBounds" ни в одном языке или в любом контроле. Вы должны это закодировать. Если бы вы прочитали статью и изучили код, вы бы поняли это.