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()
            {
           //........
           }
  • 相关阅读:
    树上差分
    Java学习笔记(二)事件监听器
    Java学习笔记(三)Java2D组件
    1066. Root of AVL Tree (25)
    有一种蓝,是神往,是心醉,是心伤
    软考论文的六大应对策略V1.0
    iOS 图形编程总结
    【悼鲁迅】诗一首
    【秋游】诗一首
    【游普罗旺斯薰衣草庄园】诗一首
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/3772326.html
Copyright © 2011-2022 走看看