プログラムな日常>C#>
C#のコツ
(knack in C#)

私のブログは、プログラムを通じて、数学や科学の事象を直観的、実証的に理解して頂こうというのが一つの狙いであるものの、 プログラム教育関係のテーマでも取り上げて頂いているので、そういうことを今回は書きます。


【マルチタスク】

生活は、多かれ少なかれ、マルチタスクですが、例えば、掃除の一環で、ゴミ捨ての作業を考えましょう。 ゴミ箱の中にはポリ袋を入れているので、これを括って捨てに行きますが、それと前後して、袋を再装着しなければなりません。 もし袋が手元になければ、集中管理倉庫に探しに行かなければなりません。そこにもなければ、資材管理の担当者に連絡して、補充してもらわなければなりません。 ゴミ箱が壊れていたり、汚れていたり、足りなかったりしたら、その対処も居るでしょう。 それが誰か一人でこなす作業だとしても、一つの流れとして記述すると大変に複雑なことになります。
そんな時、作業を分けて考えると簡単です。 捨てに行く作業、袋を装着する作業、袋のストックを補充する作業、それぞれが、ある状態を維持しなければならないものとして記述するわけです。
マルチタスクは一つのプロセッサの時間分割でこなすことも多いですが、早い応答を要するシステムなど、プロセッサを分けて構成する法が合理的な場合もあります。


【イベントドリブン】

画面上のボタンが押されたり、テキスト等が記述されたり、外部からメールが届いたりといった個々のきっかけに対応して必要なジョブをこなすやり方をイベントドリブンと言います。


【グラフィック】

グラフィック自体はアウトプットですが、ユーザーの指示を待って行われるため、イベントドリブンで記述されることが多いです。 然しながら、これは必然ではありません。
1990 年代の短い期間ですが、仕事で Tru-Basic という言語ソフトを使っていたことがありました。 これは全部で80個余りの関数(命令)しか持たないシンプルなもので、その内、多用するのは 20個余りでした。 命令の数が少ないということは、それだけ早く習得できるわけで、一定の工夫は要りますが、それで大抵の必要はこなせました。
このソフトにはグラフィック機能はありましたが、なんとイベントドリブンではないという、今から考えると大変にユニークなソフトだったのです。
しかし、要求されるのはどっちみちイベントドリブン的なことですから、そこの大本の流れはプログラムで記述するわけです。
その後 java applet が出てきたのでそちらに。さらに C# の出現とともにそちらに移行しました。


【C# とグラフィック】

C# など、グラフィックな編集機能は何より、コンポーネントの名前と、必要な記述を覚える手段として良いと思いますが、一旦、基礎を習得したら、InitializeComponent は解消してしまって、中身の必要なものは Form のコンストラクタに移し、余分なものを捨ててシンプルに記述すべきというのが私の意見です。 プログラムを短くできれば、デバッグの手間も減らせます。そのための努力を怠ると、プログラムは指数関数的に膨れます。
描画が必要な時というのは、フォームが作られた時、フォームの位置や大きさが変化した時、Invalidate や Refresh という描画命令が出された時などです。 通常の記述では、このような時に発生する Paint のイベントを PaintEventHandler に導くか、もしくは、Form クラスに設けられ、 おそらくは Paint に最初から繋がれている OnPaint ハンドラをオーバーライドします。 しかし、どうしてもそう記述しなければならないという話ではありません。


【マウス移動のイベントを機に直接描画するサンプルプログラム】

私がここに紹介しようとしているのは、描画に Paint や OnPaint を使わないやり方で、単一ファイル、単一クラスで動く簡単なグラフィックのプログラムです。 これは裏道かも知れませんが、裏道を知っていてこそ、表道からはわからなかった敷地や建物の位置関係もわかるのではないでしょうか?

FromMouseMove.cs: