basyura's blog

あしたになったらほんきだす。

C# で GUI アプリを作る

visual studio を使わずに。

eclipse のコンソールに流れる、cvs リポジトリにコミットした際のログを wiki フォーマットに変換するツールを作りたい。クリップボードに貼り付ける機能も欲しい。

  • cvs のフックでゴニョゴニョは諸事情によりできない
  • eclipse でフックしてごにょごにょしたいんだけど、よく分からないので手作りする
  • VisualRuby で書いたものを使ってたけど、クリップボードにコピーした際に文字が途中できれたりして微妙に困っていた
  • 諸事情により C# を勉強しているところ

で、ログ解析は置いといて枠を作ってみた。

ソース。

using System;
using System.Drawing;
using System.Windows.Forms;
/*
 *
 */
class CVSLog {
  /*
   *
   */
  [STAThread]
    static void Main(string[] args) {
      Application.Run(new Form1());
    }
}
/*
 *
 */
class Form1 : Form {
  /*
   *
   */
  public Form1() {
    this.Width  = 800;
    this.Height = 600;
    this.Text   = "CVSLog";

    TextBox from = new TextBox {
      Multiline  = true ,
      Location   = new Point(10,10) ,
      Size       = new Size(760,260) ,
      ScrollBars = ScrollBars.Vertical ,
    };

    TextBox to = new TextBox {
      Multiline  = true ,
      Location   = new Point(10,300) ,
      Size       = new Size(760,260) ,
      ScrollBars = ScrollBars.Vertical ,
    };

    Button change = new Button {
      Location = new Point(10,270) ,
      Size     = new Size(560,30) ,
      Text     = "変換" ,
    };

    Button copy = new Button {
      Location = new Point(570,270) ,
      Size     = new Size(200,30) ,
      Text     = "コピー" ,
    };

    change.Click += delegate(object sender, EventArgs e) {
      String text = from.Text;
      // ごにょごにょ変換
      text = "wiki フォーマットに変換する : " + text;
      //
      to.Text = text;
    };

    copy.Click += delegate(object sender, EventArgs e) {
      Clipboard.SetData(DataFormats.Text, (Object)to.Text);
    };

    this.Controls.Add(from);
    this.Controls.Add(to);
    this.Controls.Add(change);
    this.Controls.Add(copy);
  }
}

レイアウトは使わずに座標を直接指定。結構簡単に書ける。

IDE が無くても C# が書けるんだよ にあるように、コンパイルコマンド(csc)にパスを通す。
コンパイルする。

csc /r:System.Drawing.dll /r:System.Windows.Forms.dll /target:winexe cvslog.cs

cvslog.exe ができるので実行。

/target:winexe

を指定すると、アプリが起動した際にコマンドプロンプトが表示されないようになる。

インスタンスイニシャライザで割と綺麗に書けることがわかった。