簡體   English   中英

WCustom滾動條未出現在WebBrowser控件上

[英]WCustom scrollbars not appearing on WebBrowser control

我正在嘗試使滾動條與Web瀏覽器控件一起使用。 但是,由於我將使用它來顯示自定義消息框的消息,因此我不希望滾動條出現,即使不需要它也是如此-這似乎是默認情況。 為了避免這種情況,我決定禁用該控件上的滾動條,而是使用另一個控件(如Panel)上的滾動條。 這樣,它們只會在瀏覽器頁面的內容太大而無法容納時出現。

盡管我已經閱讀了很多文章,即使在StackOverflow上,這似乎也是一個有效的解決方案,但效果還不太好。 一個示例是當我嘗試在此處使用解決方案時:

Panel控件中包含的WebBrowser控件的滾動問題

好像在Web瀏覽器中禁用了滾動條,它也不會讓面板使用滾動條。 在設計模式下進行測試時似乎就是這種情況。 為了解決這個問題,我嘗試在面板內的Web瀏覽器后面添加一個圖片框。 它在設計模式下有效(調整圖片框和Web瀏覽器的大小會導致面板啟用其滾動條),但在運行時不起作用(我添加了代碼以使圖片框更改為Web瀏覽器控件的大小-它本身總是會調整大小以適合可滾動內容的大小。

我還嘗試根據ScrollableRectangle的大小是否大於控件的大小,以編程方式啟用和禁用Web瀏覽器的滾動條。 從理論上講,這是可以的,除非它似乎在每次ScrollbarsEnabled屬性更改時都清除了控件中的所有文本,從而將其更改回沒有滾動條。

我正在使用以下代碼執行此操作,只要在控件中按下某個鍵,該代碼就會被有效調用:

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僅用於允許靈活地設置文本格式。 我只在談論瀏覽器控件本身的滾動條。

任何幫助,不勝感激。 謝謝!

我最終在不久前找到了解決方案,但忘了在這里發布。 基本上,我所做的是首先默認啟用滾動條,以便它們可以正常工作,盡管始終會出現。 然后,我創建了一個面板控件,並將其大小設置在Web瀏覽器控件右側顯示的非活動滾動條的頂部。

接下來,我更改了滾動條面板的錨點,以使頂部,底部和右側始終與窗體的大小對齊,因此,由於瀏覽器控件的所有邊緣也都被錨定,因此其大小也隨之固定。

然后,我添加了一些代碼來檢查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;
            }

希望這對以后的人有所幫助,在我發現一種效果很好的方法之前,采取了幾種不同的方法。

我決定對盛的答案(當我獲得足夠的聲譽時)是,首先,他是唯一可以回答的人,其次,當我考慮使用某種調用來嘗試啟用滾動條時,他的信息對我有幫助在運行時。 盡管我發現我的解決方案更簡單且同樣有效。

為時已晚。 創建Web瀏覽器時,將調用IDocHostUIHandler.GetHostInfo,並且WebBrowser的實現根據其ScrollBarsEnabled屬性的值設置DOCHOSTUIFLAG_SCROLL_NO或DOCHOSTUIFLAG_FLAT_SCROLLBAR標志。

我建議您在創建Webbrowser控件的窗口之前將ScrollBarsEnabled設置為false。

如果您不希望顯示特定元素(例如body,div或textarea)的滾動條,則可以將其樣式設置為overflow ='hidden',或使用特定於元素的滾動屬性,例如doc.Body.SetAttribute (“滾動”,“否”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM