2010-01-07 34 views
0

我正在嘗試使用Web瀏覽器控件來獲取滾動條。但是,由於我將使用它來顯示自定義消息框的消息,因此我不希望滾動條即使不需要也會顯示 - 因爲它默認情況下似乎是這樣。爲了避免這種情況,我決定禁用控件上的滾動條,並在另一個控件(如Panel)上使用滾動條。這樣他們只會在瀏覽器頁面的內容太大而不適合時纔會出現。沒有出現在WebBrowser控件上的WCustom滾動條

雖然我已經閱讀了不少帖子,但即使在StackOverflow上,這似乎也是一個有效的解決方案,但這並未奏效。一個例子是,當我試圖在這裏使用的解決方案:

Scrolling problem with a WebBrowser control contained in a Panel control

它好像如果滾動條的網頁瀏覽器中禁用,它不會讓面板使用滾動條無論是。在設計模式下進行測試時,情況似乎如此。爲了克服這個問題,我嘗試在面板內的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編輯器的解決方案,這將是在應用程序中使用,所以理想情況下,任何解決方案都不會依賴頁面加載事件等等,因爲當Web瀏覽器將設計模式設置爲開啓時,這似乎不會觸發(它需要用作HTML編輯器)。但是,在這種特殊情況下,如果沒有更好的解決方案,我可以重新啓用默認滾動條。

編輯:要清楚,我不是在談論HTML內容中的任何滾動條 - 這是無關緊要的HTML僅僅用來允許文本的靈活的格式。我只談論瀏覽器控件本身的滾動條。

任何幫助非常感謝。謝謝!

回答

2

我前段時間找到了解決方案,但忘了在這裏發帖。基本上我所做的是首先啓用滾動條默認情況下,所以他們將工作,雖然總是出現。然後我創建了一個面板控件,並將其調整到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; 
      } 

希望這可以幫助別人的未來一樣,拍了幾張不同的方法之前,我發現一個已經足夠好了。

我已經決定升起盛的答案(當我獲得足夠的聲望時),因爲他首先是唯一回應的人,其次,當我考慮使用某種調用來嘗試時,他的信息對我有幫助並在運行時啓用滾動條。儘管我發現我的解決方案更簡單,同樣有效。

+0

有用的解決方法,爲我工作。 +1和你和盛。 – fre0n 2010-02-23 05:21:00

1

太晚了。在創建web瀏覽器時調用IDocHostUIHandler.GetHostInfo,並且WebBrowser的實現根據其ScrollBarsEnabled屬性的值設置DOCHOSTUIFLAG_SCROLL_NO或DOCHOSTUIFLAG_FLAT_SCROLLBAR標誌。

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

如果您不希望某個特定元素(例如body,div或textarea)的滾動條出現,您可以將其樣式設置爲overflow ='hidden'或使用特定於元素的滾動屬性,例如doc .Body.SetAttribute( 「滾動」, 「無」)。

+0

它不是頁面中的任何元素,它只是用來顯示格式化文本(已經嘗試了richtextbox,這不是理想的)。對我來說,問題在於,顯示在瀏覽器控件本身右側的滾動條顯示的屬性已啓用/即使內容完全符合其當前大小。當內容/頁面太大而無法放入Web瀏覽器控件時,我基本上只想讓瀏覽器滾動條出現在Web瀏覽器控件上。當你說「太遲了」時,你的意思是以編程方式更改瀏覽器的滾動條屬性? – Geekman 2010-01-08 01:58:27

+0

是的,在第一次導航之前調用IDocHostUIHandler.GetHostInfo。 – 2010-01-08 03:08:12

+0

我曾經有過這樣的結論:以編程方式設置這個屬性並不奏效......但是不是有另一種方法可以讓人想到達到我想要的結果嗎? – Geekman 2010-01-08 09:08:29