非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Linux MintにMonoをインストールしてC#でGUIプログラミング

   

LinuxでGUIプログラミングをやろうとPyQtやJavaも考えましたが、使い慣れているC#を使えないかと思いMonoを導入してみました。

Linux MintへのMonoのインストールから簡単なGUIプログラム(恒例のHello Worldの表示)を作って実行することろまで紹介します。

PyQtはGUIの外観がイマイチ、Javaはやはり言語仕様が複雑なので使えなくはないけどちょっと面倒だなと。その点、C#はWindowsで使っている限りではどちらも悪くありません。

[ad#top-1]

Monoのインストール(Ubuntu系)

Linuxへのインストール方法は以下の公式サイトに載っています。

Linuxはコマンドでインストールしますが、各ディストリビューションごとにインストール方法がWebサイトに載っています。

 

ubuntu系は以下の通りです。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
$ echo "deb http://download.mono-project.com/repo/ubuntu stable-xenial main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
$ sudo apt-get update
$ sudo apt-get install mono-devel
 

 

mono --versionと打つと以下のようにバージョン情報が現れればインストール成功です。今回インストールされたバージョンは5.10.0.160でした。

 

C# on Mono でHello World

早速、高齢のHello Worldをやってみました。ソースコードはこちら。

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

class MainWindow{
  static void Main(){
    Application.Run(new HelloWorld());
  }
}

class HelloWorld : Form{
  private Label label;

  public HelloWorld(){
    this.StartPosition = FormStartPosition.CenterScreen;
    this.Width = 400;
    this.Height = 100;
    this.Text = "HelloWorld";

    label = new Label(){
      Font = new Font("Meiryo UI", 24),
      Text = "Hello World",
      AutoSize = true,
      Location = new Point(50, 20),
      Parent=this,
    };

    Button Btn1 = new Button(){
      Font = new Font("Meiryo UI", 18),
      Text = "OK",
      Size = new Size(100, 35),
      Location = new Point(250, 20),
      Parent=this,
    };
    Btn1.Click += new EventHandler(this.Btn1_Click);
  }

  private void Btn1_Click(object sender, EventArgs e){
    label.Text = "Hello Mono!";
  }
}
 

 

コンパイルと実行は以下のとおりです。

mcs -target:winexe -pkg:dotnet HelloWorld.cs

インストールに成功すると以下のようにexeファイルが生成されます。exeファイルってところがいかにもWindowsっぽい。

 

以下のコマンドで実行できます。

mono HelloWorld.exe

GUIフォームが現れてくれまsた。ボタンを押すとちゃんと文字が変わってくれます。

 

ちなみに、Wineを使っても実行できるようです。

wine HelloWorld.exe

若干ですが外観が異なりますね。まあほとんど同じですが。

 

ちょっと気になる点

ちょっと気になる点がありました。

DataGridViewの外観が以下の通り。おおむねうまくできたのですが、なんとヘッダーのフォントサイズが変更できないのです。

 

ソースコードがこちらです。Fontプロパティが効かないとう点が1つ、RowHeaderDefaultCellStyleでコンパイルエラーが起きるという点がWindows C#と異なる点です。

今後も他の細かいところで問題が発生するかもしれませんね。

DataGridView table = new DataGridView(){
  Font = new Font("Meiryo UI", 12), //<==まずこれが効かない
  Dock = DockStyle.Fill,
  ColumnCount = 4,
  AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
  AllowUserToAddRows = false,
  RowHeadersVisible = false,
  SelectionMode = DataGridViewSelectionMode.FullRowSelect,
  ReadOnly = true,
  Parent = this,
};
table.RowTemplate.Height = 30;
table.DefaultCellStyle.Font = new Font("Meiryo UI", 12);
//↓コンパイルエラー
table.RowHeaderDefaultCellStyle.Font = new Font("Meiryo UI", 12);
table.Columns[0].HeaderText = "ID";
table.Columns[1].HeaderText = "名前";
table.Columns[2].HeaderText = "住所";
table.Columns[3].HeaderText = "年齢";
table.Rows.Add("1", "山田 太郎", "東京都", "55");
table.Rows.Add("2", "鈴木 一郎", "福岡県", "34");
table.Rows.Add("3", "佐藤 隆", "北海道", "61");
table.Columns[0].Width = 80;
table.Columns[1].Width = 200;
table.Columns[2].Width = 200;
table.Columns[3].Width = 100;

 

[ad#ad-1]

スポンサーリンク

 - C#基本編, Linux