在Linux系统运行WinForm程序

在Windows系统,最常见的就是Windows Forms程序(以下简称WinForm程序),也就是窗体应用程序,比如MS Office,媒体播放器软件等,WinForm程序比起Web应用程序,明显在实时性,用户亲和度和操作便捷能力方面强很多。在Linux系统下,虽然也有桌面窗体应用程序,但应用很少。

能否将WinForm程序移植到Linux系统上面呢?

目前,Novell公司的开源项目mono提供了将.NET程序运行在各种非Windows平台的能力,例如控制台程序,WinForm程序和ASP.NET等,下面我们对各Linux系统进行一下实验,由于Liunx系统有不同的发行版,我们分别进行实验。

1,在Redhat 5.5企业版运行WinForm程序

首先在Redhat上安装一个mono运行时,如果要运行WinForm程序,还必须安装mono-winforms插件,如果你下载了最新的mono 2.8.1版本,已经内置支持了。

下面我们看看一个简单的WinForm程序在Redhat的运行效果:

显示效果不错,跟在Windows下面的VS2008中的设计界面一致,但有一个致命Bug,就是窗体无法接收键盘事件,尽管使用鼠标没有任何问题,但是一敲击键盘,窗体就失去了响应,在网上查了很多资料,也没有找到原因。

理论上,在Redhat也可以运行一个mono+Gtk#的窗体界面,无赖我的Redhat先是装的mono 2.8.1,我当前使用的monodeveloper开发的Gtk程序必须使用mono 2.8.2的库。

2,在OpenSUSE 上运行WinForm程序

OpenSUSE 是一个很漂亮的Linux发行版,我在http://www.go-mono.com/mono-downloads/download.html

下载了一个VMWare的虚拟机,下载地址:

http://ftp.novell.com/pub/mono/appliance/2.8.2/Mono-2.8.2-vmx.zip

系统内置了mono的运行环境和开发环境,下面是该虚拟机的系统桌面:

在它的英文环境下,运行MonoWinForm程序,除了汉字无法显示,没有Redhat中的无法输入文字的问题

切换OpenSUSE系统到简体中文环境,再次运行MonoWinForm程序,虽然可以显示出汉字,但是文本框和窗体大小显示严重有问题,整个窗体都变了形,输入文字反应奇慢,不过没有RedHat中窗体失去响应的问题。

3,在OpenSUSE上运行Gtk#应用程序

按照mono官方的说法,要想开发跨平台的窗体应用程序,窗体的界面开发应该选择Gtk#,而不是Windows GUI。下载一个Mono develop,就可以开发mono+Gtk#的应用程序了。

下载地址:http://monodevelop.com/Download

选择你使用的系统即可按照说明下载合适的版本,我下载的是Windows版本的。

下面是MonoDevelop的开发环境:

将此程序编译好之后,发布到OpenSUSE上,看看运行效果:

结果运行效果完全正常,跟直接在Windows系统一样,而且中文显示正常。

本想将这个Gtk程序移植到Redhat上面去,无耐说没有Gtk#的运行库,单独安装也安装不上。

下面是该窗体的代码:

using System;
using Gtk;
 
public partial class MainWindow : Gtk.Window
{
 public MainWindow () : base(Gtk.WindowType.Toplevel)
 {
  Build ();
 }
 
 protected void OnDeleteEvent (object sender, DeleteEventArgs a)
 {
  Application.Quit ();
  a.RetVal = true;
 }
  
 protected virtual void OnButton1Clicked (object sender, System.EventArgs e)
 {
  MessageDialog msg=new MessageDialog(this,DialogFlags.NoSeparator,MessageType.Info,ButtonsType.Ok,"{0}","aaaa");
  msg.Text="你好,"+this.entry1.Text;
  msg.Show();
 }
 
}

我采用的是MessageDialog来模拟Windows平台的MessageBox,但发现运行后,那个对话框的OK按钮不管用,按下后对话框不消失,还望哪位Gtk#开发的高人告诉一下。

总结:

目前在Linux平台上运行WinForm程序基本上是可行的,推荐使用OpenSUSE发行版,不过对WinForm应用程序的中文支持还有问题。

如果要开发真正跨平台的窗体应用程序,推荐使用Gtk#做开发,它开发出的.NET程序,即可运行在Linux系统,也可以运行在Windows系统。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏林德熙的博客

win10 uwp 上传Nuget 让别人用我们的库 Nuget下载打包Nuget上传命令行使用Nuget

我们的开发经常使用别人的dll,那么我们需要每次都从网上下载,然后复制到我们的项目, 而不知道我们的dll是否安全? 当我们的库更新的时候,我们又需要从网上搜索...

16610
来自专栏腾讯玄武实验室的专栏

深入解析 DLL 劫持漏洞

2010 年 8 月,微软发布安全通报 2269637,同时网上公布了大量受影响软件的名字,DLL 劫持漏洞开始进入大家的视野。

81600
来自专栏张善友的专栏

通过Chocolatey软件包管理器安装.NET Core

在Linux的世界里,有了yum/apt-get百分之九十的软件都可以通过它来安装管理。但是在Windows系统上,装个软件还是挺折腾的。比如我要装个Chrom...

21870
来自专栏跟着阿笨一起玩NET

NLog日志框架简写用法

本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html

10220
来自专栏乐沙弥的世界

SQL Server 2012安装错误:Error while enabling Windows feature: NetFx3, Error Code: -2146498298

最近在安装SQL server 2012时,碰到错误:Error while enabling Windows feature: NetFx3, Error C...

23820
来自专栏张善友的专栏

结合Jexus + Kestrel 部署 asp.net core 生产环境

ASP.NET Core 是微软的全新的框架。这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖。 获得下面三个方面的优势,你可以把...

28560
来自专栏NetCore

【翻译】在Mac上使用VSCode创建你的第一个Asp.Net Core应用

Setting Up Your Development Environment 设置你的开发环境 To setup your development machi...

23060
来自专栏施炯的IoT开发专栏

Windows Phone App Studio发布重要更新-支持Windows 8.1 源代码生成

    自2013年8月Apps Team发布Windows Phone App Studio以来,由于其低入门门槛和较好的易用性,用户和项目数量增长迅速,从W...

40850
来自专栏大内老A

“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用

微软在2002年推出了第一个版本的 .NET Framework,这是一个主要面向Windows 桌面(Windows Forms)和服务器(ASP.NET W...

22060
来自专栏跟着阿笨一起玩NET

浅谈如何在C#Winform程序中正确使用登录窗体

看到很多朋友在CSDN中发帖放分求“如何实现登录验证正确后弹出主窗体”的问题。关于这个问题的实现方法,一般很多人都是使用在登录窗体点击“登录”按钮后,通过...

18010

扫码关注云+社区

领取腾讯云代金券