こんにちは。c#初心者です。 最近ようやくTypeConverterがわかるようになってきて、ついでにExpandableObjectConverterもやってみました。 自作した構造体はキーの同時押しを表現するもので、概略は以下の通り [TypeComverter(typeof(KeySetConverter))] struct KeySet { public Key1 { get; } public Key2 { get; } public Key3 { get; } } んでもって、KeySetConverterはどっかに書いてあった通り、 ・CanConvertFrom, ConvertFrom ・CanConvertTo, ConvertTo ・GetCreateInstanceSupported, CreateInstance ・GetProperties は全て適切にオーバーライドしました(多分)。 それで、また自作コンポーネントがあるのですがその概要を以下に示します、 class KeyCatcher : Component { public KeySet TriggerKey { get; set } public event EventHandler TriggerKeyCatched { add; remove; } void OnPreviewKeyDown(object sender, PrevewKeyDownEventArgs e); } TriggerKeyCatchedはとりあえず問題ないです。問題はTriggerKeyをデザイナーで編集することです。というよりは編集そのものはうまくいっています。 TriggerKeyは展開できますし、展開された値を編集することも出来ます。 不正値がKeySetConvererで作成され、代入されようとすれば、間違いなく、このプロパティの部分で例外がスローされます。 つまり、デザインモードでは(リフレクションでプロパティを呼び出しているのか)正しく代入されているらしいです。 しかし、「Windows フォーム デザイナーで生成されたコード」(~.Desingener.csのファイル)の方を確認すると、何も代入するコードが書かれていません。 もしやと思い、プロパティと、OnPreviewKeyDownにブレークポイントを設け、早速デバッグ開始すると、プロパティが呼び出されること無くフォームが表示。 恐る恐るキーを押してみると、OnPreviewKeyDownのブレークポイントでストップ。KeyTriggerの値は 「Key1 = None, Key2 = None, Key3 = None」。予想通りでした。KeyTriggerに代入されていません。 この解決策(デザインモードでないときに代入させる方法)はあるでしょうか? 理想としては、SizeやLocationをいじったら ~.Size = new Size(100, 200); ~.Location = new Point(50, 100); のようにデザイナにその代入コードが記述されるようにしたいのですが、どなたか分かる方、いらっしゃいましたら教えていただけませんか。
↧