在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的虚拟机,下载地址:
 
系统内置了mono的运行环境和开发环境,下面是该虚拟机的系统桌面
 
在它的英文环境下,运行MonoWinForm程序,除了汉字无法显示,没有Redhat中的无法输入文字的问题
 
切换OpenSUSE系统到简体中文环境,再次运行MonoWinForm程序,虽然可以显示出汉字,但是文本框和窗体大小显示严重有问题,整个窗体都变了形,输入文字反应奇慢,不过没有RedHat中窗体失去响应的问题。
 
3,在OpenSUSE上运行Gtk#应用程序
按照mono官方的说法,要想开发跨平台的窗体应用程序,窗体的界面开发应该选择Gtk#,而不是Windows GUI。下载一个Mono develop,就可以开发mono+Gtk#的应用程序了。
选择你使用的系统即可按照说明下载合适的版本,我下载的是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系统。

 

 
 
 
 

    本文转自深蓝医生博客园博客,原文链接:http://www.cnblogs.com/bluedoctor/archive/2011/02/14/1954317.html ,如需转载请自行联系原作者



相关文章
|
7天前
|
资源调度 JavaScript 搜索推荐
Linux系统之部署envlinks极简个人导航页
【4月更文挑战第11天】Linux系统之部署envlinks极简个人导航页
40 2
|
10天前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
61 0
|
10天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
26 0
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
24 6
|
10天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
20 0
|
3天前
|
运维 网络协议 Unix
18.系统知识-Linux常用命令
18.系统知识-Linux常用命令
|
11天前
|
Prometheus 监控 Cloud Native
【Linux】查看系统内存命令(详细讲解)
【Linux】查看系统内存命令(详细讲解)
|
14天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
35 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
7月前
|
缓存 Ubuntu Linux
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
279 0
|
8月前
|
Oracle 关系型数据库 Linux
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
261 0