#c# #winforms
#c# #winforms
Вопрос:
Есть ли способ реализовать функцию hitTest() для PrintPreviewControl?
Я хочу знать, на какую страницу нажал пользователь, и смещение от верхнего левого края. (см. Изображение ниже)
Конечная цель — обеспечить полную интерактивность с PrintPreviewControl, благодаря чему пользователи могут нажимать и перетаскивать объекты. Я понимаю, что этот элемент управления не содержит моих объектов. У меня есть свой собственный список объектов. Я знаю, где они были отображены на странице. Я просто хочу получить местоположения мыши на страницах, которые я могу использовать для выбора своих собственных объектов, а затем обновить элемент управления предварительным просмотром при перетаскивании.
Комментарии:
1. IIRC, этот элемент управления имеет
Columns
Row
свойства и, плюсStartPage
. Вы должны быть в состоянии определить, на какой странице генерируется наведение курсора мыши, используяe.Location
значение и сетку, определяемую столбцами / строками в предварительном просмотре.2. Это выглядит как PrintPreviewDialog, а не PrintPreviewControl . Это важно, делает доступ к нужным частным переменным в два раза сложнее. Не совсем практично.
3. Правильно. Если это на самом деле PrintPreviewDialog (или вы украли ToolStrip? :), У него есть общедоступное
PrintPreviewControl
свойство, которое возвращает элемент управления, используемый для предварительного просмотра. Вы можете получать из него строки и столбцы (и подписываться на егоMouseDown
событие).4. Вы правы, это PrintPreviewDialog, но вы можете получить PrintPreviewControl из него. И вы можете получать строки и столбцы, но создание надежного hitTest только из них и местоположения щелчка мыши является отрывочным. Я рассматриваю возможность использования моего собственного PrintController, такого как PreviewPrintController, в качестве средства получения каждого прямоугольника страницы. Надеюсь, кто-то, возможно, уже разобрался с этим.
5. Вам нужно самостоятельно распечатать предварительный просмотр и отслеживать прямоугольник, в котором отображается содержимое страницы, чтобы вы могли, например, изменить его границу на другой цвет, выделить его (закрасить полупрозрачным цветом) и т.д. Вы можете рисовать непосредственно на a
PrintPreviewControl
, используя его событие рисования. — Или вычислите ограничивающий прямоугольник, используя столбцы и строки. Не сложно, разрыв между разделами исправлен (с использованием макетов по умолчанию).