2009-07-22 5 views
7

私はErrorProviderから直接継承するコントロールを作成しました。私はそれをToolboxBitmap属性を適用すると、コントロールが元のコントロールと同じアイコンをツールボックスに持つのには十分だと思っていましたが、そうではありません。私はフォームにコントロールを追加するかのように、それはちょうど表示されますが、ツールボックスのアイコンを変更しないように、それは奇妙です。私はここで何が欠けていますか?私はすでにビジュアルスタジオを再起動し、この動作を維持します。私のuserControlにツールボックスに独自のアイコンがある

[ToolboxBitmap(typeof(ErrorProvider))] 
public class ErrorProviderEx : ErrorProvider { 
... 
} 
+0

FYI:これらの種類のコントロールは、Webユーザーコントロール(WUC)ではなく、Webカスタムコントロール(WCC)です。 WUCはWebプロジェクト全体に使用されているascxファイルで、WCCはマシン全体で使用されています...あなたのケースでは、あなたの質問にWCCを書くべきです - 他人を混乱させないようにしてください。 –

+1

私はあなたが話していることを知らない。これはSystem.Windows.Forms.ErrorProviderです。 –

+0

ビットマップに「ハードコードされた」パスを指定すると(ToolboxBitmap( "c:\\ my.bmp"))、デフォルトのビットマップが表示されますか? –

答えて

5

Visual Studio 2008では、パフォーマンス上の理由から、ToolBoxBitmapで指定されたアイコンは、現在のソリューションのいずれかのコンポーネントのツールボックスに追加されません。標準の「歯車」アイコンが使用されます。 [ツールボックス...アイテムの追加...]ダイアログボックスを使用してアセンブリを手動で追加すると、発生している動作のカスタムアイコンが表示されます。さらに、ErrorProviderExをフォームにドラッグすると、指定したアイコンが使用されます。これは、コメント内でメモした動作です。

ご使用のケースでは、typeof(ErrorProvider)を使用しているため、カスタムビットマップの使用に関する通常の問題は発生しません。

(この現象はVisual Studio 2005でも当てはまるかもしれませんが、Visual Studio 2003はアイコンを表示して私たちを傷つけました)(私は個人的にこの新しい動作が気に入らないです。ソリューションのすべてのコントロールとコンポーネントのアイコンを取得することができます。アイコンを表示するレジストリハックがあるのだろうかと思います。)

+0

これはVS 2010の現在の動作です。私が知っているレジストリのハッキングはありません。 –

+0

まだVS 2013で同じです。 – peterincumbria

2

同じプロジェクトですか?またはあなたが参照しているDLL?

固定dllを参照するときに適切なアイコンが表示されます。コントロールdllを構築し、それを参照してください。

+0

ああ、同じソリューションの別のプロジェクトです。回避策はありませんか? –

1

回避策があります。あなたのUserControlが "MyControl"プロジェクトにあると仮定して、自分自身に参照を追加します。つまり、MyControlプロジェクトのReferrence MyControlプロジェクト。別のプロジェクトと同じように。アイコンがそのMyControlプロジェクトのツールボックスにも表示されます。

0

ツールバーのアイコンが表示される最も簡単な方法は、16x16 bmpファイルを作成し、コントロールのプロジェクトフォルダに配置し、埋め込みリソースとして設定することです。

比較的単純な例を考えてみましょう。MyCompany.Components.MyControlというコンポーネントがあるとします。 16x16ビットマップを作成し、MyCompany.Components.MyControlプロジェクトフォルダのルートにMyControl.bmpという名前で保存します。次に、MyControl.bmpファイルを右クリックし、のプロパティ>ビルドアクション>埋め込みリソースを選択します。その時点でもう一つステップがあります:クラス定義の上にToolboxBitmap属性を追加します(部分クラスを使用する場合は、Designer.csファイルではなくコントロールのメイン.csファイルに属性を置きます)。

  • あなたのMyControlとプロジェクトクラスの名前空間は、プロジェクトが溶液中で表示される場所のフォルダ構造と一致します。

    [ToolboxBitmap(typeof(MyControl), "MyControl.bmp")] 
    

    があることを必ず確認してください。これを行うには、次の構文を使用します。

  • 明白かもしれませんが、bmpファイルの正しい名前を引用してください。

手動で追加するかプログラムで追加するかにかかわらず、コントロールがツールボックスに追加されるたびにビットマップが表示されます。

関連する問題