zoukankan      html  css  js  c++  java
  • Winform启动隐藏,WebBrowser交互JS

      一、启动隐藏  

      Winform比较奇怪,Load的时候设置Visiable=false,无效。webBrowser_DocumentCompleted之后调用hide隐藏了窗体,但是在notifyIcon调用show也不能打开窗体。各种奇葩问题。最后stackOverFlow上找到答案。设置透明度,和取消显示在任务栏。

     private void Form1_Load(object sender, EventArgs e)
            {
                webBrowser1.ObjectForScripting = this;
                WindowState = FormWindowState.Minimized;
                Opacity = 0;
                ShowInTaskbar = false;
            }

     在notifyIcon点击的时候触发:

     private void SCADAnotifyIcon_Click(object sender, EventArgs e)
            {
                if (WindowState != FormWindowState.Normal||Visible==false)
                {
                    WindowState = FormWindowState.Normal;
                    Visible = true;
                    Opacity =1;
                    ShowInTaskbar = true;
                }
                else
                {
                    Visible = false;
                }
            }

    达到想要的效果,启动后隐藏,只出现在托盘中。托盘再打开。

    二、JS与C# 交互

      1.C#调用webbrowser中的JS

      javascript方法:

          function localversion(version) {
                $("#loadedversion").html(version);
            }
            function setName(name) {
                $("#pname").html(name);
            }

    传递参数必须是objects数组。

            /// <summary>
             /// 调用JS的方法设置一些信息
            /// </summary>
            /// <param name="o">The o.</param>
            /// <param name="f">The f.</param>
            private void InvokeJs(object o, string f)
            {
                _objects[0] = o;
                if (webBrowser1.Document != null) 
                    webBrowser1.Document.InvokeScript(f, _objects);
            }
            private readonly object[] _objects = new object[1];

    调用的时候:

        private void CheckLocal()
            {
                InvokeJs(ConstFile.ROOLBACKFILE, "setName");
                InvokeJs(_autoUpdater.GetLoadedVersion(), "localversion");
            }

     2.js调用C#。

     需要在方法或者类上面标记:

       [System.Runtime.InteropServices.ComVisible(true)]

    在html页面中直接对应过来即可。

     <button id="checkUpdate" onclick="window.external.CheckUpdate()" class="btn btn-success btn-small">检查更新</button>
    <button id="installer" class="btn btn-info  btn-small" onclick="window.external.RunInstaller()"  >安装</button>

    这两个按钮会分别触发Form中的方法:

            /// <summary>
            /// 安装
            /// </summary>
            public void RunInstaller()
            { 
               _autoUpdater.RunInstaller();
            }
          public void CheckUpdate()
            {
           //........
           }
  • 相关阅读:
    (转)深入浅出JWT(JSON Web token)
    Node.js Koa2开发微信小程序服务端
    天翼宽带家庭网关用户:useradmin,nE7jA%5m 这个是中国电信的超级密码
    微信小程序picker重写,精确到时分秒
    Vue props中Object和Array设置默认值
    GreenDao学习
    Android注解支持(Support Annotations) (转)
    异常:Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details.
    精通 Android Data Binding
    Android BroadcastReceiver介绍 (转)
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/3772326.html
Copyright © 2011-2022 走看看