2012-01-24 6 views
8

クラスでコンポーネントデザイナを無効にするには、[System.ComponentModel.DesignerCategory( "")]属性を追加するのは簡単ですが、どのクラスでも機能しませんどの世代においてもこのクラスから派生したものです。たとえば、次世代の派生クラスでデザイナを無効にする方法

[System.ComponentModel.DesignerCategory("")] 
public class A:ServiceBase { } //Designer is disabled here 

public class B:A {} //Designer is enabled here 

[System.ComponentModel.DesignerCategory("")] 
public class B:A {} //Designer is enabled here too 

[System.ComponentModel.DesignerCategory("Code")] 
public class B:A {} //Designer is enabled even here 

これはもちろん、他の世代および順列で発生します。例えば。

//Whatever attribute here 
public class C:B {} //Designer is enabled here 

これまで誰もそれを取り除こうとしましたか?第1世代で明示的に無効になっていても、コンポーネントモデルがデザイナーサポートを追加しようとする理由は何ですか?

は、そのような挙動の理由は、参照されるアセンブリをキャッシュしているあなたに

+0

これらのクラスがどのアセンブリに存在するか、それらがソリューションの一部であるかどうかは、明確ではありません。ツールボックスの自動集計設定が優先されます。 –

+0

これは言及していません。同じアセンブリ内のfベースクラスと派生クラスのどちらか、またはそれらが異なるアセンブリビヘイビア内にある(同じ基本クラスのみ(ServiceBaseから直接派生したもの)にデザイナーはありません) – Tamir

答えて

7

ありがとうございます。これを解決するには、アトリビュートを含むアセンブリを含むアセンブリへの参照を削除し、再度追加します。この場合、Visual Studioはプロジェクトを再構築し、既定のエディタをderrivedクラスとして定義しません。

+2

私は同じ問題を抱えていました。私の基本クラスは 'System.ComponentModel.Component'から派生していました。私は' System'への参照を削除してから、もう一度追加しなければなりませんでした。すべての派生クラスはデフォルトでコードエディタで開きます。ありがとう! – Ove

+0

それはトリックだった!ありがとう! –

0

「属性の継承」は、最初は属性が継承されていないと思っていたので、私を奇妙に思っていました。属性はInherited = trueを有していてもよく、私は

:-)私の知識を広げる手助けのために、あなたのおかげでまた、私も<SubType>Component</SubType>の束を削除する必要がありましたので - docs.microsoft.comをチェックした後、私はそれが事実である必要はないことを発見しました.csprojファイルのエントリ

関連する問題