1

PropertyGrid でカスタム動的クラス オブジェクトを使用しています (ここに投稿するにはコードが多すぎます)。簡単に言えば、実行時に任意の入力 (この場合は XML ですが、それは重要ではありません) からプロパティを作成できるようにすることです。これらのプロパティは、無期限にネストできるように、別のカスタム クラスを含め、任意の型にすることができます。

私が抱えている問題は、PropertyGrid がこのクラスをコレクションとして認識し、Value 列に CollectionEditor を開くためのボタンがあることです。これには (特に) [追加] ボタンと [削除] ボタンがあり、どちらもカス​​タム クラスを根本的に壊します。これら 2 つの複雑なシステムをうまく連携させようとするのではなく、単純に CollectionEditor を完全に無効にしたいと思います。(PropertyGrid.SelectedObject を子オブジェクトに設定することにより) クラスの子オブジェクトを表示できる別のシステムがあり、正常に動作します。CollectionEditor はこのシステムとはまったく互換性がないように見えるため、ユーザーが CollectionEditor を表示するオプションさえ持たないことを望みます。

理想的には、クリック イベントをキャプチャして自分で処理できるボタンを [値] 列に配置したいだけですが、それはオプションです。また、問題の行だけで CollectionEditor を無効にするか、PropertyGrid 全体で無効にするかは気にしません。私はどちらの方法でも使用していないので、アクセスできないようにするものは何でも良いでしょう.

4

1 に答える 1

1

独自のCollectionEditorを派生させて、そこでいくつかのメソッド/イベントをオーバーライドして、フォームが表示されず、何もせずに戻るようにしたことがありますか?

次に、コレクションタイプのプロパティに次のマークを付ける必要があります。

[EditorAttribute(typeof(MyCollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]

これにより、PropertyGridでマークされたコレクションプロパティの[...]ボタンをクリックすると、MyCollectionEditorが自動的に起動します。

また、PropertyDescriptorを継承し、GetEditorメソッドをオーバーライドして、独自のCollectionEditorを返す必要がある場合もあります。

于 2012-05-04T15:00:29.557 に答える