前回まで、久々にBCCSkeltonでC++プログラムを書いたら、今度はC#でも書きたくなりました。相変わらずネタは無いですが、前回学んだ「Microsoft Learnを見ているとネタになる」という知恵を実践します。
最初に頭に浮かんだのは、
です。私が最初にイメージリストを知り、使ったのはBCCForm and BCCSkeltonのツールであるTBEditorで、ツールバービットマップをドラッグして選択するところ、例えばツールバー表示の
「ドア」のビットマップを右の実サイズ編集エリアへドラッグ(マウスアイコンは隠れています)して落とし、
左の拡大編集エリアで編集するところが気に入っていました。
このようなことが出来ないかな、と思ったのですが、C#ではそのようなメソッド(注)は無いですね。残念!
注:ImageListクラスはFormsから派生しているようなので、自分でWM_L(R)BUTTONDOWN、WM_MOUSEMOVE、WM_WM_L(R)BUTTONUPのイベントハンドラーを使って作る、ということも可能かも。しかし、何か労多くして益少なし、の感がありますね。
何れにしても、ImageListクラスの英文サンプルをネタにしてみようと思い、MSCompAssでコンパイルすると、
このように動くことは動くのですが、
(1)不要なコンポーネントのDLLを参照し、宣言している。
(2)コントロールの宣言がコンストラクターに置かれたり、InitializeComponentに置かれたりしてバラバラ。
(3)コントロールの二重定義もある。
(4)コントロール名(label3、label5)をそのまま初期表示している。(↑参照)
(5)イメージを削除しても削除したイメージが表示され続ける。(表示に段差がありますね↓参照)
(6)イメージを削除し、リストボックスが未選択になって、再度削除ボタンを押すと落ちる。(↓参照)
(7)ウィンドウサイズは可変ですが、コントロールは微動だにしません。
等々、(突っ込みどころ満載の)大分手抜きをしたっぽいコードになっています。(ネタとしては最高ですね!)
ということで、
このサンプルコードとプログラムを、
(1)日本語化
(2)コントロールのレイアウトを変更してアンカーを効かせる。
(3)雑なコーディングをきちんと統一化する。(日本語コメントも付けます。)
という感じでブラッシュアップしましょう。