精华内容
下载资源
问答
  • winform 使用html做界面

    2020-12-29 09:00:22
    winform 使用html做界面
  • [C#]winform使用html做界面

    万次阅读 2012-01-05 17:25:32
    DirectUI技术开发界面的好奇 今天想到 怎么不让winform也那样了,使用html ui ,大家都知道 使用div +css布局是一件非常容易的事情; 光说不练是假打,所以花了一个把小时尝试把winform界面做成 webui ...

    DirectUI技术开发界面的好奇 今天想到 怎么不让winform也那样了,使用html 做 ui ,大家都知道 使用div +css布局是一件非常容易的事情;

    光说不练是假打,所以花了一个把小时尝试把winform的界面做成 webui



    一: 
    大家都知道 winform 中有个控件叫 webBrowser  如果你不知道具体怎么用  详细看msdn 都知道了;  这里的它就是主角;

    准备:

    现在 我们新建一个winform项目  在上面放一个webBrowser 名称默认  停靠父窗口  在新建一个html 网页 名称 html.htm


      
     #region Windows 窗体设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
           private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.moveContron1 = new MoveControns.MoveContron(this.components);
                this.webBrowser1 = new System.Windows.Forms.WebBrowser();
                this.SuspendLayout();
                // 
                // moveContron1
                // 
                this.moveContron1.form = this;
                this.moveContron1.MoveBorder = true;
                // 
                // webBrowser1
                // 
                this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
                this.webBrowser1.Location = new System.Drawing.Point(2, 2);
                this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
                this.webBrowser1.Name = "webBrowser1";
                this.webBrowser1.ScrollBarsEnabled = false;
                this.webBrowser1.Size = new System.Drawing.Size(375, 258);
                this.webBrowser1.TabIndex = 1;
                this.webBrowser1.Url = new System.Uri("file:///E:/visual%20studio/WebUi/WebUi/HTML.htm", System.UriKind.Absolute);
                this.webBrowser1.WebBrowserShortcutsEnabled = false;
                // 
                // MianWindow
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                this.ClientSize = new System.Drawing.Size(379, 262);
                this.Controls.Add(this.webBrowser1);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.Name = "MianWindow";
                this.Opacity = 0.9D;
                this.Padding = new System.Windows.Forms.Padding(2);
                this.Text = "Form_Test";
                this.Paint += new System.Windows.Forms.PaintEventHandler(this.MianWindow_Paint);
                this.ResumeLayout(false);
    
            }
    
            #endregion
    
           private MoveControns.MoveContron moveContron1;
           private System.Windows.Forms.WebBrowser webBrowser1;
    

    html的内容如下:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
        <title></title>
    </head>
    <body style="background-color: Silver; width: 100%; height: 100%; margin: 0; padding: 0">
        <div>
            <span οnmοusedοwn="window.external.WinApiMoveEvent()" οnmοuseοver="this.style.cursor =  'move';"
                οnmοuseοut="this.style.cursor='default'">11111111</span> <span style="float: right">
                    <input id="Button2" type="button" value="最大化" οnclick="max()" />
                    <input id="Button3" type="button" value="CloseMe" οnclick="closewin()" /></span>
        </div>
        <table border="1" cellspacing="0" cellpadding="0" width="100%" height="100%">
            <tr>
                <td align="right">
                </td>
            </tr>
            <tr>
                <td>
                </td>
            </tr>
            <tr>
                <td>
                </td>
            </tr>
        </table>
    </body>
    </html>
    <script type="text/javascript">
        // 给Winform调用的方法
        function ShowAlert(msg) {
            alert(msg);
        }
        function closewin() {
            window.external.CloseMe()
        }
    
        function max() {
            var val = document.getElementById('Button2').value;
            if (val = '最大化') {
                document.getElementById('Button2').value = '最小化'
            }
            else {
                document.getElementById('Button2').value = '最大化'
            };
            window.external.MaxWin();
        }
    </script>
    

    为了 使网页能够 与winform 交互   所以  的把 com 的看见行 设置为真

      [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
        [ComVisible(true)] // 将该类设置为com可访问
        public partial class MianWindow : GlassForm
        {}

    为了 更好看 我们把 winform的 边框 去掉  

    这里 的代码 是 处理  移动窗口 我们使用 winApi
         #region win32 api 移动窗体
            [DllImport("user32.dll")]
            public static extern bool ReleaseCapture();
            [DllImport("user32.dll")]
            public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
            public const int WM_SYSCOMMAND = 0x0112;
            public const int SC_MOVE = 0xF010;
            public const int HTCAPTION = 0x0002;
    
    this.MouseDown += new MouseEventHandler(WinApiMoveEvent);
            public void WinApiMoveEvent() //这里重载了 主要解决 参数问题
            {
                ReleaseCapture();
                SendMessage(dropForm.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
            public void WinApiMoveEvent(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(dropForm.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
            #endregion
     现在 演示 怎么让js 调用 winform的方法 

     /// <summary>
            /// 给WebBrowser中Web的JS调用的方法  关闭自己
            /// </summary>
            /// <param name="msg"></param>
            public void ShowMsg(string msg)
            {
    
            }
            void Form1_AeroGlassCompositionChanged(object sender, AeroGlassCompositionChangedEventArgs e)
            {
                // When the desktop composition mode changes the window exclusion must be changed appropriately.
                if (e.GlassAvailable)
                {
                    Invalidate();
                }
                else
                {
                    this.BackColor = Color.Teal;
                }
            }
            public void CloseMe()
            {
                if (MessageBox.Show("你确定要关闭吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Close();
                }
            }
    ///最大化和最小化的处理
      public void MaxWin()
            {
                if (this.WindowState == FormWindowState.Maximized)
                {
                    this.WindowState = FormWindowState.Normal;
                }
                else
                {
                    this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
                    this.WindowState = FormWindowState.Maximized;
    
    
                }
            }
    
    如果是winform 要调用 web中的js 看这里

    webBrowser1里有 document. InvokeScript("这里是js 的函数名", 这里是参数);

    现在 基本完成  ,
    本人 不善表达  如有不明白 这里下源码看



    展开全文
  • DirectUI技术开发界面的好奇 今天想到 怎么不让winform也那样了,使用html ui ,大家都知道 使用div +css布局是一件非常容易的事情; 光说不练是假打,所以花了一个把小时尝试把winform界面做成 webui ...

    DirectUI技术开发界面的好奇 今天想到 怎么不让winform也那样了,使用html 做 ui ,大家都知道 使用div +css布局是一件非常容易的事情;

    光说不练是假打,所以花了一个把小时尝试把winform的界面做成 webui



    一: 
    大家都知道 winform 中有个控件叫 webBrowser  如果你不知道具体怎么用  详细看msdn 都知道了;  这里的它就是主角;

    准备:

    现在 我们新建一个winform项目  在上面放一个webBrowser 名称默认  停靠父窗口  在新建一个html 网页 名称 html.htm


      
     #region Windows 窗体设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
           private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.moveContron1 = new MoveControns.MoveContron(this.components);
                this.webBrowser1 = new System.Windows.Forms.WebBrowser();
                this.SuspendLayout();
                // 
                // moveContron1
                // 
                this.moveContron1.form = this;
                this.moveContron1.MoveBorder = true;
                // 
                // webBrowser1
                // 
                this.webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
                this.webBrowser1.Location = new System.Drawing.Point(2, 2);
                this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
                this.webBrowser1.Name = "webBrowser1";
                this.webBrowser1.ScrollBarsEnabled = false;
                this.webBrowser1.Size = new System.Drawing.Size(375, 258);
                this.webBrowser1.TabIndex = 1;
                this.webBrowser1.Url = new System.Uri("file:///E:/visual%20studio/WebUi/WebUi/HTML.htm", System.UriKind.Absolute);
                this.webBrowser1.WebBrowserShortcutsEnabled = false;
                // 
                // MianWindow
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
                this.ClientSize = new System.Drawing.Size(379, 262);
                this.Controls.Add(this.webBrowser1);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.Name = "MianWindow";
                this.Opacity = 0.9D;
                this.Padding = new System.Windows.Forms.Padding(2);
                this.Text = "Form_Test";
                this.Paint += new System.Windows.Forms.PaintEventHandler(this.MianWindow_Paint);
                this.ResumeLayout(false);
    
            }
    
            #endregion
    
           private MoveControns.MoveContron moveContron1;
           private System.Windows.Forms.WebBrowser webBrowser1;
    

    html的内容如下:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
        <title></title>
    </head>
    <body style="background-color: Silver; width: 100%; height: 100%; margin: 0; padding: 0">
        <div>
            <span οnmοusedοwn="window.external.WinApiMoveEvent()" οnmοuseοver="this.style.cursor =  'move';"
                οnmοuseοut="this.style.cursor='default'">11111111</span> <span style="float: right">
                    <input id="Button2" type="button" value="最大化" οnclick="max()" />
                    <input id="Button3" type="button" value="CloseMe" οnclick="closewin()" /></span>
        </div>
        <table border="1" cellspacing="0" cellpadding="0" width="100%" height="100%">
            <tr>
                <td align="right">
                </td>
            </tr>
            <tr>
                <td>
                </td>
            </tr>
            <tr>
                <td>
                </td>
            </tr>
        </table>
    </body>
    </html>
    <script type="text/javascript">
        // 给Winform调用的方法
        function ShowAlert(msg) {
            alert(msg);
        }
        function closewin() {
            window.external.CloseMe()
        }
    
        function max() {
            var val = document.getElementById('Button2').value;
            if (val = '最大化') {
                document.getElementById('Button2').value = '最小化'
            }
            else {
                document.getElementById('Button2').value = '最大化'
            };
            window.external.MaxWin();
        }
    </script>
    

    为了 使网页能够 与winform 交互   所以  的把 com 的看见行 设置为真

      [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
        [ComVisible(true)] // 将该类设置为com可访问
        public partial class MianWindow : GlassForm
        {}

    为了 更好看 我们把 winform的 边框 去掉  

    这里 的代码 是 处理  移动窗口 我们使用 winApi
         #region win32 api 移动窗体
            [DllImport("user32.dll")]
            public static extern bool ReleaseCapture();
            [DllImport("user32.dll")]
            public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
            public const int WM_SYSCOMMAND = 0x0112;
            public const int SC_MOVE = 0xF010;
            public const int HTCAPTION = 0x0002;
    
    this.MouseDown += new MouseEventHandler(WinApiMoveEvent);
            public void WinApiMoveEvent() //这里重载了 主要解决 参数问题
            {
                ReleaseCapture();
                SendMessage(dropForm.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
            public void WinApiMoveEvent(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(dropForm.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
            #endregion
     现在 演示 怎么让js 调用 winform的方法 

     /// <summary>
            /// 给WebBrowser中Web的JS调用的方法  关闭自己
            /// </summary>
            /// <param name="msg"></param>
            public void ShowMsg(string msg)
            {
    
            }
            void Form1_AeroGlassCompositionChanged(object sender, AeroGlassCompositionChangedEventArgs e)
            {
                // When the desktop composition mode changes the window exclusion must be changed appropriately.
                if (e.GlassAvailable)
                {
                    Invalidate();
                }
                else
                {
                    this.BackColor = Color.Teal;
                }
            }
            public void CloseMe()
            {
                if (MessageBox.Show("你确定要关闭吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Close();
                }
            }
    ///最大化和最小化的处理
      public void MaxWin()
            {
                if (this.WindowState == FormWindowState.Maximized)
                {
                    this.WindowState = FormWindowState.Normal;
                }
                else
                {
                    this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
                    this.WindowState = FormWindowState.Maximized;
    
    
                }
            }
    
    如果是winform 要调用 web中的js 看这里

    webBrowser1里有 document. InvokeScript("这里是js 的函数名", 这里是参数);

    现在 基本完成  ,
    本人 不善表达  如有不明白 这里下源码看



    作者:qq283868910 发表于2012-1-5 17:25:32 原文链接
    阅读:441 评论:0 查看评论

    转载于:https://www.cnblogs.com/SpeakHero/archive/2012/01/05/2431296.html

    展开全文
  • winform 使用html做界面 包你满意
  • 这个例子不是webBrowser的html应用,只是借用html画了界面(背景是动画飘动的浮云和透明框图)。Winform中,在webBrowser写入html(背景和一些菜单选择项),点击后,取得点击的id值,添加点击事件,在winform里面判断id...

    这个例子不是webBrowser的html应用,只是借用html画了界面(背景是动画飘动的浮云和透明框图)。

    Winform中,在webBrowser写入html(背景和一些菜单选择项),点击后,取得点击的id值,

    添加点击事件,在winform里面判断id值,执行相应不同的操作。

    本例判断点击,根据取得的id值,执行打开新窗口的操作。

    webBrowser的Winform操作的例子很多,比如写入、取值、模拟输入等等,可以百度下。

    这里只是用了取值。

    背景动画网上巨多,搜索“CSS3 动画”,直接将html代码写到字符串赋给webBrowser,需要判断点击的组件或图片,

    取个id值,在事件里判断就可以了。

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

    {

    HtmlDocument htmlDoc = webBrowser1.Document;

    htmlDoc.Click = new HtmlElementEventHandler(htmlDoc_Click); //添加点击事件

    }

    //鼠标点击事件 取得html点击的 id 值,根据 id 值打开新窗口并传递参数

    private void htmlDoc_Click(object sender, HtmlElementEventArgs e)

    {

    HtmlDocument doc = sender as HtmlDocument;

    HtmlElement ele = doc.GetElementFromPoint(e.ClientMousePosition);

    //取得点击的 id 序号

    int num = get_ID(ele.OuterHtml);

    //打开新窗口位置

    int lx = this.Left 290;

    int ly = this.Top 80 num*80;

    //打开新窗口

    f_info = new Form_Info(lx, ly,num);

    f_info.StartPosition = FormStartPosition.Manual;

    f_info.ShowDialog();

    if (f_info.DialogResult == DialogResult.OK)

    {

    //这里写代码

    }

    }

    bfcbb36186dcd8bbc114699cda48191d.gif

    展开全文
  • html做界面+winform

    2013-09-17 11:46:47
    RT,大家讨论下,感觉html界面容易一些
  • WinForm使用多线程异步加载界面数据

    千次阅读 2020-06-19 09:58:25
    WinForm使用多线程异步加载界面数据 处于学习阶段,个记录,如有写错,请多多指教。 private void FrmQC111_Load(object sender, EventArgs e) { Thread load = new Thread((obj) => { //创建一个新...

    WinForm使用多线程异步加载界面数据

    处于学习阶段,做个记录,如有写错,请多多指教。

    private void FrmQC111_Load(object sender, EventArgs e)
    {
        Thread load = new Thread((obj) =>
           {
             //创建一个新线程,并编写执行的方法
             Action<string> act = new Action<string>(Bindt); 
             act.BeginInvoke(null, null, null);
          });
        load.IsBackground = true;
        load.Start();
    }
    private void Bindt(string a)
    {
    	//实现具体绑定方法
    }
    

    1. 需求

    页面初始化时,需要给大量下拉控件绑定下拉列表,数据源需要从数据库查询出来,如果使用默认的顺序加载方式,页面会在所有控件数据加载完成后才能初始化完成,页面会卡顿比较久的时间,为了页面加载及空间数据源加载互不影响,考虑使用异步加载的方式,将加载控件数据部分独立出一个新线程操作,与原线程互不影响,实现在显示页面的同时,异步加载控件数据。

    1. 知识

    多线程(主线程=前台线程、子线程=后台线程)
    内置委托(Action)
    Invoke以及BeginInvoke

    1. 实现

    此处不使用Lamba表达式,上面代码段是用Lamda表达式实现
    通过Thread类创建子线程
    private void FrmQC111_Load(object sender, EventArgs e)
    {
    Thread load = new Thread(new ThreadStart(loadpage));
    //ThreadStart 是一个委托,ThreadStart 委托只能用于无返回值、无参数的方法,ParameterizedThreadStart 委托则可以用于带参数的方法
    //Loadpage 是该线程将要执行的方法。
    //Load是新线程对象。
    }
    通过内置委托的BeginInvoke绑定具体方法
    Private void loadpage()
    {
    Action act = new Action(Bindt); //创建委托对象,与指定方法Bindt进行关联
    act.BeginInvoke(null, null, null);
    //第一个null,为action传入参数
    //第二个null为异步回调函数
    //第三个null为回调函数返回结果
    }
    实现加载控件数据源的方法
    private void Bindt(String a)
    {
    //……….
    }
    参考:https://blog.csdn.net/qq_33574890/article/details/83386757
    https://www.cnblogs.com/wyt007/p/9486752.html
    https://www.cnblogs.com/Xue-Dragon/p/10578190.html
    https://www.cnblogs.com/whl4835349/p/11757688.html
    https://www.cnblogs.com/xingyuanzier/p/11144322.html
    测试
    因为数据加载过快,看不到异步执行结果,因此在绑定数据的方法中让线程等待10s以观察实际效果
    Thread.Sleep(10000);
    结果
    页面会先打开,打开之后大概8s左右,控件数据自动加载成功。

    参考文章:
    https://blog.csdn.net/qq_33574890/article/details/83386757
    https://www.cnblogs.com/wyt007/p/9486752.html
    https://www.cnblogs.com/Xue-Dragon/p/10578190.html
    https://www.cnblogs.com/whl4835349/p/11757688.html
    https://www.cnblogs.com/xingyuanzier/p/11144322.html

    展开全文
  • winform如何不卡界面

    2019-07-14 23:31:00
    如何在winform程序中,让界面不再卡死。 关于委托和AsyncCallback的使用界面卡死的原因是因为耗时任务的计算占用了主线程,导致主界面没有办法进行其它操作,比如拖动。造成界面卡死的现象。我们只需要把耗时任务...
  • c++用WinForm做界面的实现

    万次阅读 2014-11-24 15:22:00
    c++用WinForm做界面的实现  因为笔者是以前是C#的,对Winform情有独钟,最近想转C++,想把以前的一些Delphi转成c++,MFC我不熟而且用起来相当烦效果又丑,GTK图形库用起来太麻烦,琢磨着研究一下WInform前台,
  • 第一种方法是 在winform界面上放置ReportViewer界面,相关的代码如下: public DataTable dt; private void FormReport_Load(object sender, EventArgs e) {string sPath = "D:\\bzj\\MyBooks...
  • DevExpress的Winform控件中有不少控件是支持HtmlDraw的,就是类似html的便签设置文本部分的字体粗细大小、颜色、背景色、文本中带图片、斜体、下划线、删除线和链接等,这是一个用来实现界面多样化效果的一个不错的...
  • winform 界面库SunnyUI初次使用

    千次阅读 2020-11-01 18:32:56
    上次了个winform的三层架构程序; https://blog.csdn.net/bcbobo21cn/article/details/109417884 下面用界面库来美化一下;SunnyUI库; 相关资源如下;到第二个注册然后下载zip; Blog: ...
  • C#Winform频繁刷新导致界面闪烁解决方法
  • 界面中有一个变量appVersion=“xiaomi”; 需要获取变量appVersion的值,有以下方法: 1.插入一个函数,此函数返回 token变量,注意需要判断token是否存在,否则会报错,示例代码如下: webBrowser1.Navigate...
  • winform频繁刷新导致界面闪烁解决方法
  • 1 登入界面 功能:登入框验证,注册表记录用户及密码,进度条,winform登入信息保存 2 主界面  功能:透明界面美化, 透明按钮切换,用户信息传递,最大化,最小化,关闭,移动窗口,定时器,弹窗,页面传值 3右下...
  • NanUI基于ChromiumFX项目进行开发,它能让你在你的Winform应用程序中使用HTML5/CSS3/Javascript等网页技术来呈现用户界面(类似Electron)。同时NanUI提供了原生窗口和定制化的无标题栏无边框窗口,你能使用全部的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,875
精华内容 6,750
关键字:

winform使用html做界面