我有一个.Net Panel控件,它包含一个WebBrowser的子控件。我不会理解我这样做的原因,但它与打印控件有关。面板控件的AutoScroll属性设置为“true”,我正在调整WebBrowser的大小以适应其自己的内容(通过使用NavigateComplete2事件触发时WebBrowser的.Document.Body.ScrollRectangle.Size属性)。这样,面板上的滚动条就会出现,您可以上下滚动面板,以便能够看到WebBrowser的内容。
问题在于,当您向下滚动以查看WebBrowser底部的内容然后单击它时(可能您单击html中的链接),面板会跳回到顶部而链接不会采取行动。
请任何人帮助我了解正在发生的事情以及如何解决这个问题?
答案 0 :(得分:2)
我遇到了同样的问题,也有Panel内的WebBrowser。这是我正在使用的解决方案(我在stackoverflow上找到了其他地方):
class AutoScrollPanel : Panel
{
public AutoScrollPanel()
{
Enter += PanelNoScrollOnFocus_Enter;
Leave += PanelNoScrollOnFocus_Leave;
}
private System.Drawing.Point scrollLocation;
void PanelNoScrollOnFocus_Enter(object sender, System.EventArgs e)
{
// Set the scroll location back when the control regains focus.
HorizontalScroll.Value = scrollLocation.X;
VerticalScroll.Value = scrollLocation.Y;
}
void PanelNoScrollOnFocus_Leave(object sender, System.EventArgs e)
{
// Remember the scroll location when the control loses focus.
scrollLocation.X = HorizontalScroll.Value;
scrollLocation.Y = VerticalScroll.Value;
}
protected override System.Drawing.Point ScrollToControl(Control activeControl)
{
// When the user clicks on the webbrowser, .NET tries to scroll to
// the control. Since it's the only control in the panel it will
// scroll up. This little hack prevents that.
return DisplayRectangle.Location;
}
}
答案 1 :(得分:0)
尝试在包含的面板和WebBrowser控件上将TabStop设置为false。这对我有用。这样做的原因是,如果它被设置为想要成为一个tabstop,它将使第一次点击事件意味着它正在获得焦点。然后重置滚动条位置......不确定为什么会这样做......
但是,在导航到新页面时,您需要手动重置滚动条位置......
这是我使用的。 是的,这是一个黑客攻击。
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
webBrowser1.TabStop = true;
webBrowser1.Focus();
webBrowser1.TabStop = false;
}