Quantcast
Channel: OKWAVE 最新質問([技術者向] コンピューター/205)【本日】
Viewing all articles
Browse latest Browse all 38062

c# デザイナで自作構造体の(編集と)代入

$
0
0
 こんにちは。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);  のようにデザイナにその代入コードが記述されるようにしたいのですが、どなたか分かる方、いらっしゃいましたら教えていただけませんか。

Viewing all articles
Browse latest Browse all 38062

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>