【问题标题】:How can I access a WebBrowser control from within a UserControl?如何从 UserControl 中访问 WebBrowser 控件?
【发布时间】:2009-10-23 01:35:38
【问题描述】:
我有这个布局:
面板内的用户控件。面板在 Form1 内。
WebBrowser 位于 Form1 内部的另一个面板中。
所以:
Form1
Panel1 Panel2
MyUserControl TheWebBrowser
如何通过 MyUserControl 在 Panel2 中设置我的网络浏览器的 URL?
我尝试过类似的方法,但效果不佳。
this.Parent.Parent.Controls["panel2"].Controls["webBrowser1"]
【问题讨论】:
标签:
c#
.net
winforms
webbrowser-control
panel
【解决方案1】:
您是否考虑过在您的 UserControl 上创建属性依赖项?这样您的用户控件就不必知道它的位置,只需知道它对 WebBrowser 控件的引用即可。
public class UserControl: Control
{
.
.
.
public WebBrowser Browser{ get; set; }
.
.
.
}
这样,您的主窗体负责进行连接,并且您避免了与父窗体的讨厌耦合。
【解决方案2】:
我可以进一步解耦并将业务逻辑放在业务层类中。然后我在一个可以缓存对它需要操作的控件的引用的地方创建业务层对象,并将业务层对象的引用缓存在需要调用逻辑的对象中。当我需要用一个新类(例如从 aximp 生成的类)替换 WebBrowser 控件时,这将使我受益。我可以通过访问缓存的引用来调用业务逻辑对象,这与 MFC 的 doc/view/frame 非常相似,您可以在其中使用 GetDocument()->UpdateAllViews 在某些内容发生更改时更新其他视图。