Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Может ли PictureBox оставить призрак на Form1 после его перемещения с помощью мыши?

Автор вопроса: CommunityОтветов: 1

Я перемещаю графические блоки на Form1, щелкая по ним левой кнопкой мыши и перетаскивая их в другое место. (то есть, используя mousemove, mousedown, mouseup с e.X и e.Y). Я также соединяю формы линий из одного графического блока с другим с помощью перетаскивания. Однако при перетаскивании конца формы линии я не показываю конец формы, когда он находится над графическим блоком, что указывает на то, что это нормально, чтобы оставить его на данном графическом блоке.

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

  • Что такое соединяющая линия? Можете ли вы опубликовать код, который может воспроизвести это поведение? В любом случае попробуйте позвонить Me.Invalidate(true) (указав регион, если он слишком сильно мерцает) после сброса. Или обновите форму (больше мерцания). Я не совсем уверен, в чем ваша проблема / контекст, поэтому ... Jimi 29.12.2019
  • Решил вопрос. Конец формы линии пропускал стандартные графические блоки, расположенные на Form1 во время разработки, которые были невидимы во время выполнения. Поэтому я в основном отфильтровал имена добавленных новых графических блоков, и это решило проблему. Линии - это линии, которые можно нарисовать на форме без пользовательских графических команд; они являются частью Microsoft VBPowerPacks ShapeControls. 29.12.2019

ghost-blogpicturebox

Ответы

Ответ 1 · Rosh

Да, вам нужно создать собственный класс, который наследует класс панели / окна изображения, и на уровне конструктора вам нужно сказать me.doublebuffered = true, чтобы предотвратить тень от перетаскивания окна изображения / панели

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы