! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

인쇄화면에서 마우스휠 이동 시 스크롤을 확인 후 페이지이동하는 방법이 있을까요? > Q&A | 토론

본문 바로가기

WinForms윈폼 인쇄화면에서 마우스휠 이동 시 스크롤을 확인 후 페이지이동하는 방법이 있을까요?

페이지 정보

작성자 Reis 작성일 2022-09-29 13:59 조회 729회 댓글 0건
제품 버전 : 제품 버전 : 10.40.20171.0
컨트롤 이름 : FarPoint.Win.Spread.SheetView

본문

안녕하십니까.


이전에 인쇄 화면에서 마우스휠로 페이지 이동하는 방법을 질문드려서 답변을 받고 작업을 했는데


적용해보니 확대 후 스크롤 상관없이 페이지 이동이 되고 있습니다.

 

스크롤 이동 후에 페이지 이동이 되도록 기능을 넣을 수 있을까요?



 


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

1 답변

WinForms윈폼 Re: 인쇄화면에서 마우스휠 이동 시 스크롤을 확인 후 페이지이동하는 방법이 있을까요?

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK써니 작성일 2022-09-30 15:00 댓글 1건

본문

Reis 님, 안녕하세요.

그레이프시티입니다.


인쇄 미리보기 대화 상자는 .NET WinForms의 표준 대화 상자입니다. 해당 컨트롤은 공식적으로 마우스 휠을 지원하지 않습니다.


대신 우회적인 방법으로, Reflection을 사용하여 대화 상자의 스크롤 위치를 변경할 수 있습니다.

그러나 이 방법은, .NET의 향후 릴리스에서 Microsoft가 구현을 변경하거나 private 속성 이름을 변경하는 경우 코드가 작동하지 않을 수 있다는 점 유의 부탁드립니다.


하기 샘플 코드는 마우스 스크롤로 페이지 내 이동과, 페이지 간 이동이 가능하도록 구현한 코드입니다. 아래 코드를 개발에 참고 부탁드립니다. 

using System.Reflection;

private void PreviewControl_MouseWheel(object sender, MouseEventArgs e)
{
    PrintPreviewControl previewControl = (PrintPreviewControl)sender;
    PropertyInfo positionProp = typeof(PrintPreviewControl).GetProperty("Position", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance);
    Point position = (Point)positionProp.GetValue(previewControl);

    if (e.Delta < 0)
    {
        Size virtualSize = (Size)typeof(PrintPreviewControl).GetProperty("VirtualSize", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(previewControl);
        int height = previewControl.Height;

        //Check if we are at the end of page
        int maxPos = virtualSize.Height - height;
        if (position.Y >= maxPos)
        {
            previewControl.StartPage++;
        }
        else
        {
            position.Y = Math.Min(maxPos, position.Y + SystemInformation.MouseWheelScrollDelta);
            positionProp.SetValue(previewControl, position);
        }
    }
    else
    {
        //Check if we are at the begin of page
        if (position.Y == 0)
        {
            if (previewControl.StartPage > 0)
            {
                previewControl.StartPage--;
            }
        }
        else
        {
            position.Y = Math.Max(0, position.Y - SystemInformation.MouseWheelScrollDelta);
            positionProp.SetValue(previewControl, position);
        }
    }
}


다른 궁금한 점이 생기면, 문의 주시기 바랍니다.

감사합니다.

그레이프시티 드림

댓글목록

GCK써니님의 댓글

GCK써니 작성일

Reis 님, 안녕하세요.
생플 코드의 동작에 대한 보충 설명을 위해 댓글 드립니다.

상기 샘플 코드는 다음과 같이 동작하고 있습니다.
1. 현재 스크롤의 위치가 페이지의 최상단인 경우에 마우스를 위로 스크롤 하면, 이전 페이지로 이동합니다.
 => 이때 이전 페이지의 최상단이 보여집니다.
2. 현재 스크롤의 위치가 페이지의 최하단인 경우에 마우스를 아래로 스크롤 하면, 다음 페이지로 이동합니다.
 => 이때 다음 페이지의 최하단이 보여집니다.

이점을 개발 시 참고 부탁드립니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.