#.net #winforms #draw #paint #delphi-prism
#.net #winforms #рисовать #Краски #delphi-prism
Вопрос:
У меня есть winform, на котором я хочу нарисовать пунктирную рамку, когда вы нажимаете левую кнопку мыши и перетаскиваете. Когда отпущена левая кнопка мыши, рамка должна исчезнуть. Я могу сделать это с помощью ControlPaint.Метод DrawReversibleFrame. Однако он рисует за пределами winform каждый раз, когда он не находится внутри winform. Кажется, что методы controlpaint используют экран в качестве области рисования, а не winform. Я прав?
Если мое предположение верно, как вы сообщаете controlpaint использовать winform в качестве области рисования.
Спасибо,
Ответ №1:
ControlPaint «обманывает», рисуя на рабочем столе.
Один из способов обойти проблему — самостоятельно посмотреть размеры. Как только вы дойдете до границы своего элемента управления, прекратите его вызывать.
Обновлено:
Похоже, вы не обязательно правильно преобразуете свои размеры.
Вот простой пример, чтобы всегда рисовать на элементе управления panel1:
private void panel1_Paint(object sender, PaintEventArgs e) {
ControlPaint.DrawReversibleFrame(
new Rectangle(panel1.PointToScreen(new Point(32, 32)), new Size(64, 64)),
panel1.BackColor,
FrameStyle.Dashed);
}
Комментарии:
1. @ larstech, это не моя проблема. на самом деле он начинает рисовать за пределами winform или в противном случае моя фактическая точка мыши (x, y) выглядит автоматически сдвинутой.
2. @digitalanalog добавил пример. Похоже, вы не преобразуете свои координаты.
3. @ larstech, спасибо, это работает. Вы также можете использовать RectangleToScreen. Это потрясающе. Еще раз спасибо.