PrintPreviewControl hitTest() и взаимодействие

#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 , используя его событие рисования. — Или вычислите ограничивающий прямоугольник, используя столбцы и строки. Не сложно, разрыв между разделами исправлен (с использованием макетов по умолчанию).