久々にC#ネタ
先日から、改良を続け、日々使いやすくなっているのではないかと思う毎日メモ2005ですが・・・
これ、VS2005のC#で作っています。
その関係で、.net2.0で動作しているわけです。
2.0は1.1の問題点を修正したり、無かった機能が追加されてきているために、非常に使いやすくなってはいるんですが、
それが原因で、それはそれで、とても使いにくくなっている面を見つけました。
それは、ツールバー、ステータスバーなどの、コレクションを含むコントロールです。
1.1迄は、それはそれで、コントロールの位置と言いましょうか?
それで、管理をしていたために、面倒反面、それはそれで、統一した処理が非常に楽でした。
しかし2.0になって、各ボタン等がそれぞれコントロールとして認識されるようになったために、
各イベントは、それぞれのオブジェクトに対して直接発生します。
ウインドウ全体で処理しなければいけないような、MouseMoveイベントなどは、全部一カ所に飛んできて欲しいこともあるんですが、
コレが、それぞれのコントロールに飛んでしまうために、全部のコントロールに対して、Formのマウスイベントへ飛ぶように記載しなければいけなくなりました。
確かにね、ボタンそのものをそのような形状に派生させて、その派生型をボタンとして配置すれば、いちいちコードを書く必要はないのですが、だからといって、それぞれに飛んでしまっているのには変わりはありません。
コレは、C#が内部的にそれぞれのコントロールに分配しているのを、入力したコードとして、またひとまとめにしているんです。
(イベントは一括して親ウインドウに送られてから分配される)
こんな無駄なことはありません。
C++的に言えばControl Parentの属性を入れれば良いんですが、そもそも、それぞれが完全に独立したウィンドウかどうかも分からない(C#的なオブジェクトであっても実ウインドウとは限らない)ので、どうしたものでしょうか??
え〜、Spy++を利用して調べました、
toolbarの各ボタンは独立したウィンドウではありませんでした。
だから、座標系を利用してそれぞれのボタンをオブジェクトとして分割しているのではないかと思います。
だからまぁ、無駄な処理がどんどんと増えるわけですよね、
良い方法が見つかればいいのですが^^
|