문제

웹 브라우저 컨트롤을 사용하여 스크롤 바를 작동 시키려고합니다. 그러나 사용자 정의 MessageBox의 메시지를 표시하기 위해 사용하기 위해 사용하려면 기본적으로하는 것처럼 스크롤 바가 필요하지 않은 경우에도 SCROLLBAR이 나타나지 않기를 바랍니다. 이것을 우회하기 위해 나는 컨트롤에서 스크롤 바를 비활성화하고 대신 패널과 같은 다른 컨트롤에서 스크롤 바를 사용하기로 결정했습니다. 이렇게하면 브라우저 페이지의 내용이 너무 커서 맞을 때만 나타납니다.

StackoverFlow에서도 꽤 많은 게시물을 읽었지만 이것은 유효한 솔루션 인 것 같습니다. 한 가지 예는 여기에서 솔루션을 사용해 보았을 때입니다.

패널 컨트롤에 포함 된 웹 브라우저 컨트롤의 스크롤 문제

마치 웹 브라우저에 스크롤 바가 비활성화 된 경우 패널이 스크롤 바를 사용하지 않도록하는 것처럼 보입니다. 디자인 모드에서 테스트 할 때 발생하는 것 같습니다. 이것을 극복하기 위해 패널 내부의 웹 브라우저 뒤에 사진 상자를 추가하려고 시도했습니다. 디자인 모드에서 (사진 상자와 웹 브라우저의 크기를 조정하면 패널이 스크롤 바를 활성화 할 수있을 때) 작동했지만 런타임 중에 작동하지 않았습니다 (웹 브라우저 제어의 크기로 사진 상자를 변경하도록 코드를 추가했습니다. 스크롤 가능한 내용의 크기에 맞게 항상 크기가 조정됩니다).

또한 스크롤 블러 릿지 크기가 컨트롤 크기보다 큰지에 따라 웹 브라우저의 스크롤 바를 프로그래밍 방식으로 활성화하고 비활성화하려고 시도했습니다. 이 이론적으로는 스크롤 바르 고정 된 속성이 변경 될 때마다 컨트롤 내의 모든 텍스트를 지우는 것처럼 보이므로 스크롤 바가없는 것으로 다시 변경됩니다.

컨트롤에 키가 눌릴 때마다 효과적으로 호출되는 다음 코드 로이 작업을 수행하고 있습니다.

if (Output.Document.Body != null)
{
    if (Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height
            || Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
        Output.ScrollBarsEnabled = true;
    else
        Output.ScrollBarsEnabled = false;
}
else
    Output.ScrollBarsEnabled = false;

또한 앱 내에서 사용될 HTML 편집기를위한 솔루션이 필요하다는 점에 유의해야하므로 웹 브라우저가 트리거되지 않는 것처럼 보이기 때문에 모든 솔루션은 페이지로드 이벤트 등에 의존하지 않습니다. 디자인 모드가 ON으로 설정되어 있습니다 (HTML 편집기로 작동하는 데 필요합니다). 그러나이 특정 상황에서는 더 나은 솔루션이 없으면 기본 스크롤 바를 활성화 할 수 있습니다.

편집하다: 분명히, 나는 HTML 컨텐츠 내의 스크롤 바에 대해 이야기하지 않습니다. 이는 HTML이 단순히 텍스트의 유연한 형식을 허용하는 데 사용되기 때문에 걱정할 필요가 없습니다. 브라우저 컨트롤 자체의 스크롤바에 대해서만 이야기하고 있습니다.

도움이 주셔서 감사합니다. 감사!

도움이 되었습니까?

해결책

나는 얼마 전에 이것에 대한 해결책을 찾았지만 여기에 게시하는 것을 잊었습니다. 기본적으로 내가 한 일은 먼저 스크롤 바를 기본적으로 활성화하여 항상 나타나지만 작동합니다. 그런 다음 패널 컨트롤을 만들어 웹 브라우저 컨트롤의 오른쪽에 나타나는 비활성 스크롤 바의 상단에 크기를 조정했습니다.

다음으로 스크롤 막대 패널의 앵커를 변경하여 상단, 하단 및 오른쪽이 항상 형태의 크기로 스냅되므로 브라우저 컨트롤의 크기가 모두 고정되어 있습니다.

그런 다음 확인한 코드를 추가했습니다 scrollrectangle 크기와 브라우저의 크기와 비교하면 높이 나 너비가 커지면 커버 패널을 보이지 않았지만 그렇지 않으면 제자리에 두었습니다.

관련 코드 스 니펫은 다음과 같습니다.

            //If still bigger, set scrollbars:

            if ((Output.Document.Body.ScrollRectangle.Size.Height > Output.Size.Height) ||
                Output.Document.Body.ScrollRectangle.Size.Width > Output.Size.Width)
            {
                ScrollPanel.Visible = false;
                ScrollPanel.Enabled = false;
            }

이것이 미래에 다른 사람에게 도움이되기를 바랍니다. 내가 충분히 잘 작동하는 것을 발견하기 전에 몇 가지 다른 방법을 가져갔습니다.

나는 Sheng의 대답을하기로 결정했습니다 (내가 충분한 평판을 얻었을 때), 먼저 그는 대답의 유일한 사람이었고, 두 번째로, 그의 정보는 스크롤 바를 시도하고 활성화하기 위해 어떤 종류의 호출을 사용하는 것을 고려할 때 도움이되었습니다. 런타임 동안. 내 솔루션이 더 간단하고 효과적이라는 것을 알았습니다.

다른 팁

너무 늦었 어. idochostuihandler.gethostinfo는 웹 브라우저가 생성 될 때 호출되며 Webbrowser의 구현은 ScrollBarenabled 속성의 값에 따라 dochostuiflag_scroll_no 또는 dochostuiflag_scroll_no 또는 dochostuiflag_scroll_no를 설정합니다.

Webbrowser Control의 창을 작성하기 전에 ScrollBarsenabled를 False로 설정하는 것이 좋습니다.

신체, div 또는 textarea와 같은 특정 요소의 스크롤 바가 나타나지 않으려면 스타일을 오버 플로우로 설정하거나 doc.body.setattribute와 같은 요소에 특정한 스크롤 속성을 사용할 수 있습니다. ( "스크롤", "아니오").

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top