2014-05-11

Mono で GUI プログラミング - Mono 3.4 を試す

Fedora 20 で Mono 3.4 を試してみましたので、備忘録的にまとめておきます。

レポジトリの追加

Fedora 20 を導入した時、クリーンインストールをしました。その際、monodevelopyum でインストールしてあります。当然その際、必要な関連パッケージもインストールされています。

この状態で、参考サイト [1] のレポジトリ情報 fedora-monodevelop.repo を、ルート権限で /etc/yum.repos.d/ にこのレポジトリ情報を追加(保存)して、yum update で MonoDevelop 4.22 および Mono 3.4.0 に更新しました。

最初、サンプルプログラムを正常にコンパイル・実行できなかったので、試行錯誤の結果、下記のパッケージを追加インストールしています。

  • libgdiplus-devel
  • mono-data-oracle
  • gtk-sharp2-devel

再び Hello World プログラム

いまさら Hello World プログラムというのもなんですが、簡単なプログラムで動作確認をします。

List: hello-winforms.cs
using System;
using System.Windows.Forms;
 
class HelloWorldApp {
    public static void Main() {
        MessageBox.Show("こんにちは、世界!", "mono");
    }
}

以前は mscorlib のバージョンによって gmcs, smcs, dmcs と複数のコンパイルコマンドが存在していましたが、参考サイト [2] によると、コンパイルコマンドは、Mono 2.11 以降 mcs に統合されたということですのでこれをコンパイルに使います。

$ mcs hello-winforms.cs -pkg:dotnet -target:winexe
$ mono hello-winforms.exe
$

コンパイルの際、-target:winexe を省略すると、Windows 上で実行した時に、コマンドプロンプトのウィンドウも表示されます。

以下は hello-winforms.exe を Windows 7 (32bit) へコピーして実行した例です。

Mono の標準の GUI Toolkit である GTk# を利用した場合の Hello World プログラムを下記に示しました。

List: hello-gtksharp.cs
using Gtk;
using System;
 
class Hello {
 
    static void Main()
    {
        Application.Init ();

        // Set up a button object.
        Button btn = new Button ("こんにちは、世界!");
        // when this button is clicked, it'll run hello()
        btn.Clicked += new EventHandler (hello);

        Window window = new Window ("mono");
        // when this window is deleted, it'll run delete_event()
        window.DeleteEvent += delete_event;

        // Add the button to the window and display everything
        window.Add (btn);
        window.ShowAll ();

        Application.Run ();
    }

    // runs when the user deletes the window using the "close
    // window" widget in the window frame.
    static void delete_event (object obj, DeleteEventArgs args)
    {
        Application.Quit ();
    }

    // runs when the button is clicked.
    static void hello (object obj, EventArgs args)
    {
        Console.WriteLine("こんにちは、世界!");
        Application.Quit ();
    }
}
$ mcs hello-gtksharp.cs -pkg:gtk-sharp-2.0
$ mono hello-gtksharp.exe
こんにちは、世界!
$ 

Windows と Linux 両方で動作することに興味があるのですが、今さら Windows Forms (winforms) に力を入れるのはやや時代遅れな気がしないでもありません。むしろ GTk# の環境を Windows でも使えるようにして GTk# の GUI を Linux と Windows 両方で利用できる方が価値が高いような気がしています。うまくいくようであれば、本ブログで報告します。

【注記】その後、Qt の C# バインディング Qyoto に注目して調べています。魅惑の Qyoto を参照してください。


参考サイト

  1. http://repos.fedorapeople.org/repos/elsupergomez/monodevelop/fedora-monodevelop.repo
  2. CSharp Compiler - Mono

0 件のコメント: