检查Web浏览器控件是否在其他表单上加载

时间:2015-06-29 06:26:11

标签: c# winforms visual-studio

我在Visual Studio中使用WinForms和C#。

应用程序有两种形式,其中一种在启动时可见。在启动时,另一个(隐藏)表单开始在WebBrowser组件上导航,当它被加载时,它应该隐藏第一个表单并显示浏览器。

我不确定如何检查表单是否完成。但是我发现可以使用:

if (browser.ReadyState == WebBrowserReadyState.Complete)

但我不知道表格如何沟通。

3 个答案:

答案 0 :(得分:1)

WebBrowser有一个很好的小事件,叫做OnDocumentCompleted,你可以听。它会在页面加载时触发。

Router.go('settings');

(代码未经过测试,可能不正确,但它应该能让您了解您可以测试的内容)

可能需要公开,如建议here

答案 1 :(得分:1)

在您的网络浏览器的表单上创建一个公共方法:

    public bool IsWebBrowserReady
    {
        get { return browser.ReadyState == WebBrowserReadyState.Complete; }    
    }

然后在您的主要内容中出现类似内容:

    private static void Main(string[] args)
{
    //Initialize forms
    var browserForm = new Form1();
    var startForm = new StartForm();

    //Show first form
    startForm.Show();

    //Make sure second form is not visible
    browserForm.WindowState=FormWindowState.Minimized;
    browserForm.ShowInTaskbar = false;

    //"Show" second form
    browserForm.Show();

    //Wait for it to be ready
    while (!browserForm.IsWebBrowserReady) Application.DoEvents();

    //Hide first form
    startForm.Hide();

    //Show second form
    browserForm.ShowInTaskbar = true;
    browserForm.WindowState = FormWindowState.Normal;

    Application.Run();
}

或者你可以将一些逻辑移入StartForm,方法是将第二个表单的引用传递给它。然后,您可以从第一个表单访问IsWebBrowserReady。但是,如果这只是一个闪屏解决方案,那么我会说这会有点过分。

作为轮询Web浏览器状态的替代方法,还可以对Web浏览器OnDocumentCompleted做出反应。这将是一个不同的模式,但看看僵尸的答案,以获得一个想法。

答案 2 :(得分:0)

我说,试试这个。 它不是最好的解决方案,但它可以胜任。

  • 确保WebBrowserControl将其成员设置为" public",这样您就可以从其他表单访问控件的成员。 (换句话说,控件将访问修饰符设置为" public&#34 ;:在https://msdn.microsoft.com/nl-be/library/wxh6fsc7.aspx阅读更多内容)
  • 然后从form2新建form1(或确保form2有一个包含对form1的引用的变量)。这样,您就可以从form2中操作或查询form1。

正如我所说,不是最优雅的解决方案,但它是目前完成任务的最快捷方式。