您的当前位置:首页>全部文章>文章详情

【C#】Winform NanUI 0.88版本 用官方源码搭建原生态开发环境

CrazyPanda发表于:2024-02-08 23:55:00浏览:483次TAG:

目录

一、需求

二、搭建原生开发环境

1.导入源码

2.解决源码报错

错误1

错误2

3.导入其他项目

4.官方Demo运行效果

三、创建自己的NanUI项目

1.新建项目

2.导入NanUI.Runtime扩展包

3.添加NanUI程序集的引用

4.MainIndex主界面相关代码

5.Program程序入口相关代码

6.读取本地前端文件的处理

四、测试项目效果

五、结束




一、需求

NanUI 插件确实很方便,但想改其中的需求怎么办,下面就来自己搭建NanUI 原生开发环境,在此很感谢作者免费的开源。

官方源码地址:GitHub - NetDimension/NanUI: NanUI is an open source .NET project for .NET / .NET Core developers who want to use front-end technologies such as HTML5 / CSS3 to build user interfaces for Windows Form applications.   

如果下载比较慢,也可以选择码云进行下载。


二、搭建原生开发环境


1.导入源码

新建一个项目,将源码的 NetDimension.NanUI 文件夹复制到你的新建的项目中。这里先导入NetDimension.NanUI,是因为其他的插件代码,依赖这个程序集,在导入其他扩展程序集之前,请确保 NetDimension.NanUI 没有错误。

点击解决方案--->添加--->现有项目,选中NetDimension.NanUI.csproj,将NetDimension.NanUI 项目导入到你的项目中

1.png

1.png


2.解决源码报错

右键生成解决方案,这时项目会报错:

1.png


错误1

我们看看报错的地方:

public static ApplicationConfigurationBuilder UseApplicationDataDirectory(
    this ApplicationConfigurationBuilder @this,  string path)
{
    @this.Use(builder =>
    {
        builder.Properties[nameof(UseApplicationDataDirectory)] = path;
        return (runtime, props) =>
        {
            if (!props.ContainsKey(nameof(UseApplicationDataDirectory)))
            {
                return;
            }
            var path = (string)props[nameof(UseApplicationDataDirectory)];
            runtime.ChromiumEnvironment.SettingConfigurations += new Action<CefSettings>(settings =>
            {
                settings.CachePath = path;
                settings.LogFile = Path.Combine(path, "debug.log");
            });
        };
    }, ExtensionExecutePosition.SubProcessStartup);
    return @this;
}

在ApplicationConfigurationBuilder方法的参数中,原本有一个参数叫 path,但在方法里面又申请了一个path的变量,将path改为paths即可。

 
public static ApplicationConfigurationBuilder UseApplicationDataDirectory(
    this ApplicationConfigurationBuilder @this,  string path)
{
    @this.Use(builder =>
    {
        builder.Properties[nameof(UseApplicationDataDirectory)] = path;
        return (runtime, props) =>
        {
            if (!props.ContainsKey(nameof(UseApplicationDataDirectory)))
            {
                return;
            }
            var paths = (string)props[nameof(UseApplicationDataDirectory)];
            runtime.ChromiumEnvironment.SettingConfigurations += new Action<CefSettings>(settings =>
            {
                settings.CachePath = paths;
                settings.LogFile = Path.Combine(paths, "debug.log");
            });
        };
    }, ExtensionExecutePosition.SubProcessStartup);
    return @this;
}


错误2

另一个错误,和上面的错误一样,在Initialize方法里,原本就有一个args参数,这里将args改为_args即可。

var context = GetAppContext();
if (context == null)
{
    context = ApplicationConfiguration.UseApplicationContext?.Invoke();
    if (context != null)
    {
        context.ThreadExit += (_, _args) =>
        {
            Application.Exit();
        };
    }
}


3.导入其他项目

将其他的几个项目一样导入进来,包括FormiumClient

1.png


4.官方Demo运行效果

将FormiumClient设为启动项目,运行:

1.png

以上都是引入官方的Demo,下面我们自己新建一个项目吧


三、创建自己的NanUI项目


1.新建项目

点击解决方案,新建项目,注意这里要用Windows窗体应用

1.png

1.png

1.png


2.导入NanUI.Runtime扩展包

下面添加NanUI的Runtime 扩展包,这个主要是给项目生成CEF包用的,

1.png


3.添加NanUI程序集的引用

1.png

将我们项目需要用到的程序集添加进来,点击确定

1.png

新建的项目结构,如下图

1.png


4.MainIndex主界面相关代码

新建类 MainIndex

using NetDimension.NanUI;
using NetDimension.NanUI.HostWindow;
using NetDimension.NanUI.JavaScript;
using System;
using System.Drawing;
 
namespace WinFormsApp2
{
 
    public class MainIndex : Formium
    {
        public override HostWindowType WindowType => HostWindowType.System;     
        //public override string StartUrl => "https://www.baidu.com/";
        public override string StartUrl => "static.app.local/index.html";
 
        #region 浏览器函数
        protected override void OnReady()
        {
            //显示控制台
            //ShowDevTools();
            //注册JS方法
            MapClrObjectToJavaScript();
        }
 
        private void MainIndex_BeforeClose(object sender, NetDimension.NanUI.Browser.FormiumCloseEventArgs e)
        {
            Console.WriteLine("[MainIndex]当浏览器关闭时");
        }
 
        private void MainIndex_LoadEnd(object sender, NetDimension.NanUI.Browser.LoadEndEventArgs e)
        {
            Console.WriteLine("[MainIndex]当网页加载完成时");
        }
        #endregion
 
        #region 注册JS方法
        private void MapClrObjectToJavaScript()
        {
            var obj = JavaScriptValue.CreateObject();
 
            //示例
            obj.SetValue("JsCallCSharp", JavaScriptValue.CreateFunction(args =>
            {
                return null;
            }));
            RegisterExternalObjectValue("CSharpProject", obj);
        }
        #endregion
 
        public MainIndex()
        {
            BeforeClose += MainIndex_BeforeClose;
            LoadEnd += MainIndex_LoadEnd;
 
            Size = new Size(1280, 800);
            StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            Title = "终端";
            CanMaximize = false;//不允许使用最大化界面按钮
            Resizable = false;//窗体是否能够改变大小
            //Mask.BackColor = Color.White;
        }
    }
}


5.Program程序入口相关代码

Program.cs 改为下面这样

using NetDimension.NanUI;
using NetDimension.NanUI.LocalFileResource;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WinFormsApp2
{
    static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //Application.SetHighDpiMode(HighDpiMode.SystemAware);
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
 
            WinFormium.CreateRuntimeBuilder(env =>
            {
                env.CustomCefCommandLineArguments(cmdLine =>
                {
                    // Configure command line arguments of Cef here.
                    //cmdLine.AppendSwitch("disable-gpu");
                    //cmdLine.AppendSwitch("disable-gpu-compositing");
                });
                env.CustomCefSettings(settings =>
                {
                    // Configure default Cef settings here.
                    settings.WindowlessRenderingEnabled = true;
                });
                env.CustomDefaultBrowserSettings(cefSettings =>
                {
                    // Configure default browser settings here.
                });
            },
            app =>
            {
                //读取本地资源
                app.UseLocalFileResource("http", "static.app.local", System.IO.Path.Combine(Application.StartupPath, "View"));
                app.UseMainWindow(context =>
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
 
                    return new MainIndex();
                });
            })
            .Build()
            .Run();
        }
    }
}


6.读取本地前端文件的处理

新建一个View文件夹

1.png

将你的web前端代码复制进去

1.png


四、测试项目效果

运行,成功读取到了本地的html文件,那么使用NanUI源码搭建原生开发环境也就到此结束了

1.png


五、结束

如果这个帖子对你有用,欢迎给我点赞 + 留言,谢谢


原文链接Winform NanUI 0.88版本 用官方源码搭建原生态开发环境-CSDN博客

猜你喜欢

【C#】Winform NanUI 0.77版本 读取嵌入式资源
引入NanUI框架这三个组件都要引入了,NetDimension.NanUI.AssemblyResourceHandler 是属于嵌入式资源部分,下载地址:由于作者已经废弃了这个版本,在VS2019中的 NuGet 程序包 中已经下载不了,我这里上传了,有需要的可以点击下面链接下载NanUI.AssemblyResourceHandler.0.7.4&nbsp;下载&nbsp;另外,NanUI.AssemblyResourceHandler 源码github地址:GitHub - maxjov
发表于:2024-02-06 浏览:371 TAG:
【C#】从零开始用C#写一个桌面应用程序(二)一个表白程序
恶搞表白小程序如何添加按钮,如何添加属性和事件请移步前文。基础操作第一步:新建窗口&nbsp;&nbsp;在工具箱内找到label和button,拖到form上,设置它们的size属性,autosize属性,text属性。第二步:添加事件为了实现我们的效果,需要给三个按钮分别设计点击事件,鼠标移入事件,鼠标点下事件。分别为click,mouseenter,mousedown事件。第三步:实现移动逻辑this获取form对象,clientsize获取实时大小,使用随机数值,设置对应按钮位置。将对应
发表于:2024-01-30 浏览:294 TAG:
【C#】C# Winform 相册功能,图片缩放,拖拽,预览图分页
一、前言在一些项目中也会用到预览图片的功能,至于为什么有一个添加图片的按钮,是因为有些项目,比如视觉相关的项目,摄像头拍摄图片,然后显示在界面上,拍一次显示一张。另一个,就是分页功能,当预览图位置不够用时就会用到。当前软件的功能1.添加图片如果8个预览图都满了,会自动分页,就可以点击上一页,或者下一页了。2.点击预览图显示大图点击预览图,之前的拖拽和放大会自动复位3.大图可以拖拽,放大,缩小如果图片比较小,有这个功能就看到图片的更多细节了。4.图片倒序排列最后拍摄的图片,始终显示在前面,方便用户
发表于:2024-02-02 浏览:313 TAG:
【C#】C# NLua Winform 热更新
一、概述NLua 是一个用于 .NET 平台的 Lua 脚本绑定库。它允许在 C# 代码中嵌入 Lua 脚本,并允许两者之间进行交互。NLua 的主要特点包括:轻量级:NLua 是一个轻量级的库,易于集成到现有的 .NET 项目中。动态类型:Lua 是动态类型的语言,这意味着变量的类型可以在运行时改变。灵活的绑定:NLua 提供了灵活的绑定机制,使得 C# 和 Lua 之间的数据交互变得简单。丰富的 API:NLua 提供了丰富的 API,以便在 Lua 脚本中调用 .NET 的类和方法。调试支
发表于:2024-02-18 浏览:342 TAG:
【C#】C# Winform自动更新
目录一、需求二、更新文件列表生成器三、软件启动器1.判断是否需要更新2.文件下载3.执行 下载,覆盖,删除任务4.执行结果四、搭建更新服务器1.启动服务器2.新建项目本体3.给启动软件加密4.修改版本号五、整体测试1.生成更新文件2.软件更新3.下载最新的版本4.打开软件本体5.总结结束当前项目已停止维护,推荐使用 FTP 版自动更新C# 自动更新(基于FTP)_c# 程序自动升级-CSDN博客一、需求在Unity里面,有XLua,ILRuntime 这样的热更新框架,有Unity经验的人都知道
发表于:2024-02-01 浏览:338 TAG:
【C#】C# 自动更新(基于FTP)
目录一、前言二、功能的实现1.本地黑名单2.读取配置文件3.读取 FTP 文件列表4.读取本地文件5.匹配更新6.版本的切换三、环境搭建四、常见问题2023.12.30 更新结束效果启动软件后,会自动读取所有的 FTP 服务器文件,然后读取本地需要更新的目录,进行匹配,将 FTP 服务器的文件同步到本地Winform 界面一、前言在去年,我写了一个 C# 版本的自动更新,这个是根据配置文件 + 网站文件等组成的框架,以实现本地文件的新增、替换和删除,虽然实现了自动更新的功能,但用起来过于复杂,代
发表于:2024-02-03 浏览:342 TAG:
【C#】C#md5加密
using&nbsp;System; using&nbsp;System.Collections.Generic; using&nbsp;System.Linq; using&nbsp;System.Security.Cryptography; using&nbsp;System.Text; using&nbsp;System.Threading.Tasks; &nbsp; namespace&nbsp;mdstr { &nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;
发表于:2024-01-30 浏览:267 TAG:
【C#】C# Winform 多个程序之间的通信(非Scoket)
效果功能:打开窗体自动连接主程序,并自动添加到列表,可以向子程序群发消息可以向单个程序单独发送消息在退出程序后,添加的程序列表会自动移除一、概述参考:C# Winfrom程序之间通讯_c# sendmessege copydatastruct 返回多个值_熊思宇的博客-CSDN博客在之前我写过 winform 程序与程序之间的通信,但是这个版本有个问题,那就是只能由两个程序进行通信,同时打开多个程序的话,接收方收到的数据就会一模一样,这次发表这个教程,也就是要解决这个问题。归根结底,还是&amp;nbs
发表于:2024-02-03 浏览:295 TAG:
【C#】C#实现Excel合并单元格数据导入数据集
目录功能需求Excel与DataSet的映射关系范例运行环境Excel DCOM 配置设计实现组件库引入方法设计返回值&nbsp;参数设计打开数据源并计算Sheets拆分合并的单元格创建DataTable将单元格数据写入DataTable总结功能需求将Excel里的worksheet表格导入到DataSet里,是项目应用里常用的一种操作。一般情况下,worksheet是一个标准的二维数组,如下图:我们可以效仿 MS SQL SERVER 的一些基本导入选项,如首行是否包含数据,要导入哪个Shee
发表于:2024-01-29 浏览:346 TAG:
【C#】C# Winform 文本面板带滚动条
在PC软件开发中经常有这样的需求,需要在一个固定大小的面板中显示一些内容,并且面板能上下拖动,将所有的内容完整的展示,有点类似网页上看新闻,如果要在 winfrom 中要如何实现的呢,下面就演示如何实现的吧效果:1.新建一个winform 项目,在界面中拖入一个Panel&nbsp;将 panel1 的&nbsp;AutoScroll 设置为 True2.再次拖入一个&nbsp;Panel ,将高度拉长,这时就自动出现了滚动条,只是此时里面还没有任何内容,下面就在 panel2 中加入一点内容。
发表于:2024-02-03 浏览:323 TAG: