在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系统。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos 7中添加一个新用户并授权的步骤详解
- Linux下Apache HTTP Server 2.4.26安装教程
- 详解linux下查看系统版本号信息的方法(总结)
- 详解Centos8 配置静态IP的实现
- Linux server配置安装Java与Tomcat服务器教程详解
- Ubuntu系统下安装ImageMagick出错的解决过程
- linux 远程控制windows系统下的程序(三种方法)
- 详解Linux上svn命令行批量操作
- 详解linux ntp服务器时间同步设置
- CentOS设置静态IP的方法总结
- ubuntu服务器上快速部署docker的方法
- centos7使用supervisor的详细教程
- Ubuntu安装PHP和PHP Nginx配置方法
- Django在Ubuntu14.04的部署方法
- ubuntu19系统及以下版本安装android studio的教程