Mono で Hello World!

[Fedora 13]


Hello World!

まずは、おきまりの Hello World プログラムで動作確認です。以下のソースを hello.cs として適当な場所に保存しておきます。

List: hello.cs

using System;
using System.Windows.Forms;

class HelloWorldApp
{
  public static void Main ()
  {
    MessageBox.Show ("こんにちは、世界!", "mono");
  }
}

mcs コマンドを使い、次のように hello.cs をビルドします。出力は、拡張子が .exe になります。mono コマンドで出力されたファイル hello.exe を実行します。

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

Linux 環境に Wine がインストールされていて、かつ Wine の実行環境で .NET Framework がインストールされていれば、Wine でも実行できます。

$ wine hello.exe

Windows へ hello.exe をコピーして、ファイルをダブルクリックすれば、セキュリティの警告が出ますが、そのまま実行できるはずです。以下に、Linux (Gnome)、Wine および Windows XP で実行した結果を示しました。

Linux 上で実行した hello.exe
Wine 上で実行した hello.exe
Windows XP 上で実行した hello.exe
(Linux)
(Wine)
(Windows XP)

hello.exe の実行例

コラムASCII しか使わない言語圏の人には理解できないことかもしれませんが、ロケールUTF-8 の Linux 上で記述してコンパイルしたプログラムが、そのまま Windows 上で動作して、しかも日本語フォントが正常に表示されることは凄いことです。

ページ先頭に戻る

ボタンを使った Hello World!

MessageBox を利用した Hello World! プログラムではあまりにも簡単過ぎるので、ボタンを利用した例も示しました。

List: hello_forms.cs

using System;
using System.Drawing;
using System.Windows.Forms;

namespace bitWalk
{
  class Program
  {
    static void Main ()
    {
      Application.Run (new Hello1 ());
    }
  }

  /////////////////////////////////////////////////////////////////////////////
  // class Hello1
  /////////////////////////////////////////////////////////////////////////////
  class Hello1 : Form
  {
    private Button b;

    /////////////////////////////////////////////////////////////////////////////
    // Hello1 constructor
    public Hello1()
    {
      InitializeComponent ();
    }

    /////////////////////////////////////////////////////////////////////////////
    // InitializeComponent
    private void InitializeComponent ()
    {
      this.ClientSize = new Size (200, 60);
      this.Text = "Hello";
      // button b
      this.b = new Button ();
      this.b.Text = "こんにちは、世界!";
      this.b.Dock = DockStyle.Fill;
      this.b.Click += new EventHandler (Button_Clicked);
      this.Controls.Add (this.b);
    }

    ///////////////////////////////////////////////////////////////////////////
    // Button_Clicked
    private void Button_Clicked (object sender, EventArgs e)
    {
      System.Console.Write ("ボタンがクリックされました。\n");
    }
  }
}
// END PROGRAM

コンパイルは次の様にします。

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

各プラットフォームで実行した結果を以下に示します。

Linux 上で実行した hello_forms.exe
Wine 上で実行した hello_forms.exe
Windows XP 上で実行した hello_forms.exe
(Linux)
(Wine)
(Windows XP)

hello_forms.exe の実行例

ページ先頭に戻る

参考:Gtk# のボタンを使った Hello World!

Mono では、GUI を実現する為には、System.Windows.Forms に頼らずとも Gkt# が利用できます。Linux 上での実行例しか紹介できませんが、System.Windows.Forms を利用した場合と同等なサンプルを以下に示します。

List: hello_gtk.cs

using Gtk;
using System;

namespace bitWalk
{
  /////////////////////////////////////////////////////////////////////////////
  // class Hello2
  /////////////////////////////////////////////////////////////////////////////
  class Hello2
  {
    public static void Main (string[] args)
    {
      Gtk.Application.Init ();
      Gtk.Window w = new Window (Gtk.WindowType.Toplevel);
      w.Title = "Hello";
      w.SetDefaultSize (200, 60);
      Gtk.Button b = new Button ("こんにちは、世界!");
      w.DeleteEvent += new DeleteEventHandler (Window_Delete);
      b.Clicked += new EventHandler (Button_Clicked);
      w.Add (b);
      w.ShowAll ();
      Gtk.Application.Run ();
    }

    ///////////////////////////////////////////////////////////////////////////
    // Button_Clicked
    static void Button_Clicked (object o, EventArgs args)
    {
      System.Console.Write ("ボタンがクリックされました。\n");
    }

    ///////////////////////////////////////////////////////////////////////////
    // Window_Delete
    static void Window_Delete (object o, DeleteEventArgs args)
    {
      Gtk.Application.Quit ();
      args.RetVal = true;
    }
  }
}
// END PROGRAM

コンパイルは次の様にします。-pkg で指定するパッケージ(ライブラリ)が System.Windows.Forms を利用した場合と異なります。

$ mcs -pkg:gtk-sharp-2.0 hello_gtk.cs
$ mono hello_gtk.exe
Linux 上で実行した hello_gtk.exe
(Linux)

hello_gtk.exe の実行例

コラムGtk# は Mono におけるポピュラーな GUI ツールキットです。Mono で GUI プログラミングをするといえば、Gtk# を利用するのが一般的です。しかし、Windows 上でも利用するとなるとそうはいきません。Windows 上でも Gtk ライブラリが必要になります。いまどきの Windows であれば、.NET Framework は、ほぼ間違いなくインストールされていますが、Gtk ライブラリはそうではありません。

当サイトでは、Linux と Windows 両方で、(なるべく追加のインストールなしに)Mono で作成したアプリケーションを動作させることを重視しますので、Gtk# を利用した GUI プログラミングについては、参考程度に留めます。

ページ先頭に戻る
(C) 2009 - 2017 Fuhito Suguri
クリエイティブ・コモンズ・ライセンス
This site by Fuhito Suguri is licensed under a Creative Commons 表示 - 継承 3.0 Unported License.
Ads by Sitemix