人気ブログランキング | 話題のタグを見る

C#アプリケーション作成への戦略

今までの記事で、Visual C# の操作で、どんなソースファイルが作成されるかが分かった。あとは、アイコンなどのリソースの管理や、開発のバージョンのコントロールなどの知識がいるようだがそれは後でできるとして、一応フォームデザインを使ってプログラムを作った時にどのようなソースファイルができるかはわかったので、ビルドに失敗してもどこを修正すればいいのかがわかる。

つぎは、自分の頭の中にあるイメージのプログラムを作れるようになるために、どのような方針で調べていけばいいかということだ。それには、C#でプログラムを作るということの構造を考えてみるとよい。

.NET でプログラムを作る時は、Visual Basic を使おうと、Visual C# を使おうと同じようなプログラムができあがるはずだ。したがって、プログラムを作るための知識は、プログラム言語そのものよりも、クラスライブラリをどのように活用できるかということになる。

.NET のライブラリはすべてクラス化されている。したがって、それらのクラスライブラリを使ってのプログラミングの作業では、ほとんどが、クラスまたはインスタンスメソッドを呼び出して作業させたり、それらから情報を得たりというオブジェクトの操作になる。したがって、Ruby などでオブジェクト指向プログラムを作るのに慣れていれば、プログラミング言語を理解するための努力はそう必要ないことが分かる。必要なのは、どこの名前空間にどんなクラスがあって、そのクラスがどんなメソッドやプロパティを提供しているかという知識だ。

しかし、それだけでは、ライブラリの中の膨大な数のクラスのどれを使えばいいのか迷ってしまう。したがって、自分がどんなプログラムを作りたいのかというイメージを整理しておく必要がある。ただ、アプリケーションの共通点はあるはずで、そのプロトタイプとなるようなプログラムを作っていけばいいことになる。また、そのようなプログラムの情報はネットや本から比較的検索しやすいだろう。

そのようなプログラムとしては次のようなものが考えられる。

1.テキストエディタ
2.ペイント
3.ドロー

これらは精緻なものがフリーソフトウェアで存在するし、いまさら作る必要もないかもしれないが、メニュー操作、検索、コピーアンドペースト、オブジェクトをマウスで動かすなどの基本的なアルゴリズムの使い方を学ぶことができる。

そのときのポイントとしては、すべてのアプリケーションにせよ、オブジェクトのメソッドにせよ、入力とその処理と出力があるということだ。入力と出力に注目することでどのような情報が必要でどのような処理をし、どのように出力すればよいか分かるようになる。

たとえば、オブジェクトをマウスで動かしたいときは、左ボタンを押した時のマウスの位置情報とオブジェクトの位置情報を取得する。その時のマウスの位置情報とオブジェクトの相対距離を計算しておいて、マウスの新しい位置についてオブジェクトの位置のプロパティを設定する。それをマウスボタンが押されている間続けるというプログラムを組まなくてはならない。

こういうプログラムをいきなり組めるようにはならないが、この操作をするためにマウスの位置情報の取得が大切であることが分かる。そうすると、マウスの位置情報を取得するのは、System.Cursor.Positionプロパティを取得すればよいことが分かる。

そこで、Visual C#でプロジェクトを作り、Label コントロールを3個ほど張り付けた後、フォームを選択する。プロパティウィンドウでイベントを表示させ、Click イベントをダブルクリックする。そうしてコードエディタに次のコールバックメソッドを作成すると、フォームの中をクリックしたときの情報を表示させることができる。

private void Form1_Click(object sender, EventArgs e)
{
    label1.Text = Cursor.Position.ToString();
    label2.Text = Cursor.Position.X.ToString();
    label3.Text = Cursor.Position.Y.ToString();
}

こういうマウスコントロールに基本的なプログラムをいくつか作って感触を見ておけば、オブジェクトをマウスで移動させるなどのテクニックが分かってくる。

GUIプログラムを作るときに基本となるテクニックは、カーソル位置特にフォームとの相対位置の取得だ。Cursor.Position ではスクリーンでの位置が得られるだけなので、Formオブジェクトの、PointToClient() メソッドで相対位置に変換しなければならない。たとえば、次のようにする。

Point relPoint = this.PointToClient( Cursor.Position );

アプリケーションを作るためには、このような定石のようなスニペットがあるだろう。いまは、C#の学習を始めたばかりなのでよくわからないが、情報が集まったら、このブログでもまとめてみたい。
by tnomura9 | 2010-01-24 12:49 | C# | Comments(0)
<< フリック入力に慣れた フォームにボタンを配置する。 >>