1
// Its called from my main form in the following code

BetaScreen form = new BetaScreen(wbCache);
form.ShowDialog();
form.Dispose();

// through here

public partial class BetaScreen : Form // this is where I want to display
{
    public BetaScreen(WebBrowser browser)
    {
        InitializeComponent();
        wbMain = browser;
        wbMain.PerformLayout(); // just tried something to make it work
    }
}

我想要做的是,我有一个webbrowser导航到一个页面,比如 stackoverflow.com。我可以webbrowser在我的主要表单中看到网站图片等。我想做一些类似弹出的事情来在弹出窗口(BetaScreen)中显示这个网络浏览器。但我做不到,它只是向我显示了一个空白的白色网络浏览器,第二个形式(BetaScreen)。

代码更新:

object cache;
        public BetaScreen(object browser)
        {
            InitializeComponent();
            cache = browser;
        }

        private void BetaScreen_Load(object sender, EventArgs e)
        {
            WebBrowser browser = (WebBrowser)cache;
            browser.Dock = DockStyle.Fill;
            this.Controls.Add(browser);
        }

我通过传球成功了

`ShowDialog((object)wbCache);

但这次它从我的主要形式中消失了=D

4

1 回答 1

0

目前,您正在传递 WebBrowser 控件的相同引用。您需要使用反射克隆控件本身并传递它,而不是传递原始的引用。我修改了这段代码,因为那里的代码不适用于 WebBrowser 控件。

PropertyInfo[] controlProperties = typeof(WebBrowser).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

WebBrowser instance = Activator.CreateInstance<WebBrowser>();

foreach (PropertyInfo propInfo in controlProperties)
{
    if (propInfo.CanWrite)
    {
         if (propInfo.Name != "WindowTarget")
             propInfo.SetValue(instance, propInfo.GetValue(wbCache, null), null);
     }
}

然后通过instance

using(BetaScreen form = new BetaScreen(instance))
{
    form.ShowDialog();
}

您可以更改BetaScreen构造函数以进行WebBrowser控制。

public BetaScreen(WebBrowser browser)
于 2013-07-07T15:39:10.533 回答