|
■No58127 (Azulean さん) に返信 > .NET 4 でありながら、.NET 2.0 が必要な状態になっているわけです。 > .NET 2.0 が入っていない状態で、.NET 4 Client Profile が入っているという環境もありうるので、これは解決になっていませんし、明確な理由なしに 2.0 のアセンブリを混ぜることはおすすめしません。(危険ではないと思いますが、一般解とはとても言えません) > Type じゃなくて、string を指定するやり方なら、デザイン時のみ .NET 4 Extend が必要という形にできるかもしれませんね。 > (リンクされているスレッドで佐祐理さんが述べられていましたよね)
実行時はSystemDegisn.dllを必要とせず、Client Profileで動作させて、デザイン時のみにFull Frameworkを要求する、ということなので、文字列引数バージョンのEditorAttributeを使うということですよね。 Editorプロパティは、System.Designアセンブリを参照に追加する必要があるようなのですが、 その辺りの意味がよくわからないでいます。
private string _abc = string.Empty;
[Category("test"), Description("説明"), Editor("System.Windows.Forms.Design.FileNameEditor", "System.Drawing.Design.UITypeEditor")] public string abc { get { return _abc; } set {_abc = value;} }
このようなプロパティを作成してみたのですが、プロパティグリッドは普通の入力ボックスしか提供されませんでした。 ちなみに、System.Designはソリューションエクスプローラの参照設定に追加からは消しました。(.NET 2を利用していたので) 佐祐理さん、Azuleanさんの言う所の、System.Designアセンブリを参照の部分するという意味を根本的に勘違いしてるのでしょうか?
> どんなコードになっているのかわからないので、何とも言えません。 > 実装がまずく、例外が発生するようなことがあれば、変な挙動をする可能性は考えられますが、どういったときにどうなるかということを網羅的に知っている人は少数です。 > 再現コードを示し、協力を募った方が解決が早いと思われます。 > # 単純にあるプロパティを非表示にしたいだけなら、そのプロパティをオーバーライドするか、new で定義しなおし、 > # Browsable 属性で非表示に設定すれば楽ですけれども。
下のプログラムのようにして、[Designer(typeof())]みたいなアトリビュート?を利用して、デザイナーの定義をしていました。 上手く動くようなら、ひとまずBrowsableプロパティを使用してみようと思います。
[Designer(typeof(Line.LineDesigner))] public partial class Line : Panel {
// プロパティの定義 ・・・
internal class LineDesigner : ControlDesigner { /// <summary> /// デザイナで非表示にするプロパティを定義します. /// </summary> /// <param name="properties"></param> protected override void PostFilterProperties(System.Collections.IDictionary properties) { properties.Remove("BackgroundImage"); properties.Remove("BackgroundImageLayout"); properties.Remove("BackColor"); properties.Remove("Font"); properties.Remove("Image");
properties.Remove("ErrorImage"); properties.Remove("ImageLocation"); properties.Remove("InitialImage"); properties.Remove("WaitOnLoad");
//base.PreFilterProperties(properties); } }
} // Lineクラスの閉じ
>>最後に、3点目が、カスタムコンポーネントはそもそもGUIを考慮せずに作成するものなのかという点です。 >>空白のコンポーネントをGUIで配置して、後はプログラムで操作するような感じがデフォルトで、 >>あまりGUIで設定するところまでやらないものなのか、というのが気になっています。 > GUI が「Windows フォームデザイナでのプロパティ」であるなら、一般的でしょう。 > ボタンとか、チェックボックスとか、プロパティペインで設定するのが一般的ですし、自作のコントロールもそれに倣うのは何もおかしくありません。
ありがとうございます。やはり、デザイナを利用するのは間違いではないのですね。 カスタムコントロールは.NET 4Clientのせいなのかもしれないですが、思ったより難しいですね。
参照 http://dobon.net/vb/dotnet/control/propertygrid.html ・「ファイルを開く」ダイアログを表示してファイルを選択できるようにする の辺り
|