C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms

这篇具有很好参考价值的文章主要介绍了C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  国产系统大势所趋,如果你公司的winform界面软件需要在linux上运行,如果软件是用C#开发的,现在我有一个好的快速解决方案。

  世界第一的微软的Microsoft Visual Studio,确实好用,C# 开发起来确实效率高,不过微软的开发语言开发的软件的界面都是跟windows系统绑定的,现在.net core已经支持linux系统了,但是仅限于控制台应用程序,不包含WindowDesktop,所以是不支持原生有界面的.net 软件的,微软语言的软件界面所用的API基本都封装在System.Windows.Forms.dll上了,所以用支持linux的工具重新开发System.Windows.Forms类库就能让C#软件的界面在linux运行!

  首先,必须是.net core 框架开发C#软件的,工程框架要改成控制台,C#软件升级开发框架也是很容易。其次,安装GTK环境,基本是一键安装完成。

  最近机缘巧合,公司软件需要移植上linux运行,研究后发现,软件太复杂,开发了十几年的软件,重新开发工程量就很大,而且程序的复杂性都无法保证能移植成功。就突发奇想,如果把GTK表单控件封装成C#的控件直接替换c#的原生表单控件不就行了吗?然后试了一下确实可以!而且能保留VS的原生可视化开发。目前已经实现了常用的表单控件、容器、菜单、数据表、选择器,先看效果:

C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms

 文章来源地址https://www.toymoban.com/news/detail-528840.html

封装起来是很复杂的,GTK提供的是基础组件,要把组件拆分重新组合成微软原生控件的组成结构,并且要实现相关的功能。 有些微软的表单控件GTK是没有,需要自制,如掩码输入框、日期选择框、选择框列表,DataGridView是用GTK.TreeView来封装实现的,很多控件的赋值方法和数据源模式都不一样,也需要改。我封装的控件都实现了C#原生控件的常用属性、事件、方法,以保证与原生程序兼容。

C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms

 

需要说明一下,界面或工程资源文件的图片资源在生成程序后是经过加密的,而微软件图像类和资源读取方法类库都是放在WindowDesktop库上,控制台工程是没有相关的类库的,所以无法读取。Form图像处理有个麻烦的地方,界面有任何变动,Form.Designer图像程序的读程序都会自动更新为System.ComponentModel.ComponentResourceManager,所以自定义命名空间是不行的,一变动又要修正。

我的解决方法是自已写System.Drawing.Image和System.Drawing.Bitmap,自写System.ComponentModel.ComponentResourceManager类读取图片,把Form界面的xxx.resx源文件复制到一个文件夹内,直接当成XML文件来读取,就能把里面的图像读取出来,然后转成byte[]数据传给Bitmap。

在使用封装好的引用的System.Windows.Forms.DLL时,还需要引用System.Resources.Extensions,这个在实现程序里用不上,但是VS开发需要,而且有些版本的还不行,会出错,经过测试用.net core2的版本可以

C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms

 

最后,控制台框架开发是没有界面的,而Form界面在控制台框架工程里默认也不能打开的,但是可以改配置来修正,只需要把obj目录子目录下找到xxxx.designer.runtimeconfig.json文件,把NetCore改成WindowDesktop即可,需要重启VS,如下红字

"runtimeOptions": {
"tfm": "net6.0",
"framework": {
"name": "Microsoft.WindowsDesktop.App",
"version": "6.0.0"
},

然后就可以在控制台框架下愉快的开发表单界面了。

 

到了这里,关于C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenSSH移植到Linux开发板

    在Linux开发中,有时候需要远程登录到开发板上对系统进行一些操作,这个时候就需要用到SSH服务。SSH(Secure Shell 安全外壳协议)是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,OpenSSH是SSH协议的一个免费开源版本。 这里一共需要移植三个软件包: zlib,openss

    2023年04月26日
    浏览(48)
  • 嵌入式开发之linux内核移植

    目录  前言 一、下载内核源码 1.1 下载linux-3.0.1 1.2 解压源码文件 二、 内核添加yaffs2文件系统支持 2.1 下载yaffs2 2.2 内核添加yaffs2文件补丁 三、配置开发板 3.1 修改机器ID 3.2 添加开发板初始化文件 3.3 配置NandFalsh 3.3.1 添加NandFlash设备 3.3.2 添加NandFlash驱动 3.3 修改Kconfig(支持

    2024年02月07日
    浏览(104)
  • FTP服务器移植到Linux开发板

    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 将Linux开发板作为一个小型的 FTP 服务器,这样就可以通过 FileZilla 软件直接在开发板和 windows 之间通过网络进行文件互传。在开发板上搭建 FTP 服务器很简单

    2024年02月14日
    浏览(45)
  • 嵌入式Linux底层系统开发 +系统移植+内核文件系统(基础)

    搭建交叉编译开发环境 bootloader的选择和移植 kernel的配置、编译、移植和调试 根文件系统的制作 前两个要点通常芯片厂家提供。后边两个要点是公司的工作重点。 学习方法:先整体后局部,层层推进 如何编译—如何添加命令和功能—如何定义自己的开发板。 移植的基本步

    2024年02月03日
    浏览(71)
  • 记录移植Python3到arm开发板linux系统中

    开发板情况 arm板是公司采购的工控机。主要用来 使用python3解析excel表格处理数据。 配置如下: 配置 版本 cpu imx6dl(armv7架构) 操作系统 linux3.10 python版本 2.7 项目情况 项目中最好使用 python3 。可行的有以下几种方式: 方式 优缺点 可行度 重做文件系统 订制程度比较高,后期增

    2024年02月04日
    浏览(51)
  • 基于全志A33开发板linux系统移植学习记录(Boot0)

    第一章 Boot0基于ARMGCC的编译与修改 入行快两年,希望通过学习系统移植巩固下相关的知识,目标板使用基于全志A33 的astar-parrot开发板,开始本来想着使用Boot0来加载uboot,但后期发现为了代码统一和便捷性,最终还是选择了SPL作为跳板,但Boot0流程相对清晰,所以将对其做的

    2023年04月08日
    浏览(45)
  • 嵌入式linux驱动开发之移远4G模块EC800驱动移植指南

    回顾下移远4G模块移植过程, 还是蛮简单的。一通百通,无论是其他4G模块都是一样的。这里记录下过程,分享给有需要的人。环境使用正点原子的imax6ul开发板,板子默认支持中兴和移远EC20的驱动,这里要移植使用的是移远4G模块EC800。 imax6ul开发板 虚拟机(Ubuntu18.04) 交叉编译

    2024年02月17日
    浏览(71)
  • EtherCAT 开源主站 IGH 在 linux 开发板的移植和伺服通信测试

    手边有一套正点原子linux开发板imax6ul,一直在吃灰,周末业余时间无聊,把EtherCAT的开源IGH主站移植到开发板上玩玩儿,搞点事情做。顺便学习研究下EtherCAT总线协议及其对伺服驱动器的运动控制过程。实验很有意思,这里总结下实验过程,分享给有需要的小伙伴。 igh EtherC

    2024年04月29日
    浏览(141)
  • 基于RK3588的嵌入式linux系统开发(二)——uboot源码移植及编译

            由于官方的SDK占用空间较大(大约20GB左右),需要联系相关供应商提供,且官方的SDK通过各种脚本文件进行集成编译,难以理解系统开发的详细过程。本章介绍直接从官方Github网站下载源码进行移植,进行uboot移植及编译,具体内容如下所述: 1.进入官方的github网

    2024年01月16日
    浏览(61)
  • linux驱动开发 ST7789 LCD驱动移植(I.MX6ULL平台)

    前言 I.MX6ULL的板子未选配RGB的屏幕,无法在板子上进行GUI的开发调试,不过手头上有块控制器为ST7789V3的LCD屏幕(1.3inch),通过简易接线后可以很方便进行驱动的移植 如有异议,欢迎留言指正 ST7789 LCD控制器 ST7789是一款单芯片TFT-LCD控制器,支持并口与SPI通信方式 特性 控制器支

    2023年04月09日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包