簡易テキストエディタを作ろうその1

せっかく.Netライブラリが使えるF#なのだから GUIプログラミングをやってみよう、ということで このページではテキストエディタの作成を行います。 細かい説明は抜きにして、ざっと進めてみましょう。 この講座では、オブジェクト指向の知識をある程度仮定しています。 まずは、ウィンドウの表示です。 事前準備として、 System.DrawingとSystem.Windows.Formsを参照の追加で追加してください。 (導入編のコンパイラの使い方を参照)
ウィンドウの表示
open System;;
open System.Windows.Forms;;

[<STAThread>]
do System.Windows.Forms.Application.Run(new Form());;
このプログラムをコンパイルし実行すると コマンドプロンプトの上にウィンドウが表示されます。 STAThreadというのはCOM関係の何からしいのですが詳しくは知りません。 ここで大事なことは RunメソッドにSystem.Windows.Formsの派生クラスのインスタンスを与えれば ウィンドウが表示される、という点です。 この例では、Formクラスを直接与えています。
TIPS
コマンドプロンプトを消すには
プロジェクト->[プロジェクト名]のプロパティ->構成プロパティ->Buildの画面の
真ん中少し上あたりにあるProject type:の箇所を
EXEからWINEXEに変更してください。
それでは、Formクラスの派生クラスを作ってみましょう。
ウィンドウの表示2
open System;;
open System.Windows.Forms;;

type Editor = class inherit Form as base
	new () as this = {} then ()
end;;

[<STAThread>]
do System.Windows.Forms.Application.Run(new Editor());;
このプログラムでは、Formクラスを継承したEditorクラスを作成し Runメソッドに与えています。 Editorクラスには、まだメンバもメソッドも何もありません。 実行結果は先ほどと同じになりますね。 それでは、このプログラムにリッチテキストボックスを配置します。
リッチテキストボックスの配置
open System;;
open System.Windows.Forms;;

//メインフォーム
type Editor = class inherit Form as base
	val edit : RichTextBox;
	//コンストラクタ
	new () as this ={edit=new RichTextBox()}
		then
		this.edit.Dock <- DockStyle.Fill;
		this.Controls.Add(this.edit);
end;;
[<STAThread>]
do System.Windows.Forms.Application.Run(new Editor());;
このプログラムのEditorクラスは RichTextBoxクラスのメンバ変数editを一つ持っています。 Editorクラスのコンストラクタでは 1.editをRichTextBoxで初期化 2.RichTextBoxのDockスタイルの設定 3.RichTextBoxをフォームに関連づける という動作を行っています。 スタイルの設定で、DockStyle.Fillを指定すると、 コントロールは親フォームいっぱいに広がります。 この行をコメントアウトして動作を確かめてみてください。 たったこれだけのプログラムですが エディットボックスが表示され、文字が入力出来るようになりました。