1. 程式人生 > 其它 >在Linux系統執行WinForm程式

在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系統。