我有一个C#应用程序,它有一个webbrowser,需要能够完全禁用它。这样做的最佳方法是什么?
我正在考虑创建一个透明面板以在需要时放置webbrowser,但我不确定这是否是最好的方法。我还注意到C#不容易让面板变得透明。
编辑:通过禁用澄清我的意思...我不想让用户能够点击或更改\编辑webbrowser中的任何内容。
答案 0 :(得分:17)
奇怪的是,WebBrowser控件没有您所期望的Enabled属性。您可以将AllowNavigation属性设置为false,这将阻止用户单击链接。
原来它确实有一个Enabled属性,继承自Control。但是你必须明确地将它转换为Control才能访问它:
((Control)webBrowser1).Enabled = false;
您应该知道,设置Enabled 完全会禁用与WebBrowser控件的任何用户交互。这包括滚动条,因此一旦将Enabled设置为false,用户甚至无法滚动控件中的网页。
如果这比您想要的更多,那么将AllowNavigation属性设置为false将停止用户单击链接但仍允许他们滚动页面。你需要检查它是否也会阻止Javascript onclick事件发生。
如果你想阻止在页面中触发任何事件,你可能会实现一些DOM从WebForms代码到WebBrowser控件的工作。您可能还需要开始禁用WebBrowser中的输入控件。这一切都取决于你想要它的残疾程度。
答案 1 :(得分:3)
根据您的上一条评论,我假设您使用的是WinForms。 (WPF确实允许透明面板:-))这意味着您正在使用WebBrowser
控件。您是否尝试将其Enabled
属性设置为false?
答案 2 :(得分:1)
当你说'禁用'时,你的意思是什么?如果将“已启用”属性设置为false,则会将其禁用,这适用于所有表单控件。但是如果需要,可以通过设置BackColor将面板设置为透明。
更新: 实际上,你是对的,它是ActiveX控件的包装器,因此它不是典型的WinForms控件。你想要的是透明的paenl解决方案。这个人Tobi在他的博客上有一个解决方案:
http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
基本思想是在面板类上覆盖此方法:
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
return createParams;
}
}
答案 3 :(得分:0)
您可以从其父控件数组中删除Web浏览器吗?
答案 4 :(得分:0)
在VB中:DirectCast(WebBrowser1,Control).Enabled = False