DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ユーザーコントロールを継承すると継承先のデザイナが開けなくなる

環境/言語:[環境:Windows7/使用言語:VB.NET/.NET Framework:4.0]
分類:[.NET]

早速ですが、表題の件で困っています。

プロジェクトは以下の様な状態とします。
・継承元ユーザーコントロール(以下、ユーザーコントロールA)
・派生ユーザーコントロール(以下、ユーザーコントロールB)

designer.vbのコード(抜粋)
・ユーザーコントロールA
Partial Class ユーザーコントロールA
Inherits System.Windows.Forms.UserControl

・ユーザーコントロールB
Partial Class ユーザーコントロールB
Inherits ユーザーコントロールA

上記の状態で・ユーザーコントロールBのデザイナを開いこうとすると、
「型'ユーザーコントロールA'がみつかりませんでした。この型を含む
アセンブリが参照されていることを確認してください。」と表示されてしまいます。

実行自体は問題なくできます。

ユーザーコントロールの継承をするとデザイナが表示されなくなってしまうものなのでしょうか。
以上、よろしくお願いします。
■No30691に返信(かつおさんの記事)

派生ユーザーコントロールの作成手順はどのように行っていますでしょうか?

とりあえずリビルドしてみても駄目でしょうか?
■No30694に返信(shuさんの記事)
> ■No30691に返信(かつおさんの記事)
>
> 派生ユーザーコントロールの作成手順はどのように行っていますでしょうか?
手順作成を明記します。
1.ソリューションにユーザーコントロールA,Bを追加
2.ユーザーコントロールB.Desiner.vbを起動し、継承先を手動で変更
Partial Class ユーザーコントロールB
Inherits System.Windows.Forms.UserControl
      ↓
    Inherits ユーザーコントロールA

> とりあえずリビルドしてみても駄目でしょうか?
リビルド・クリーンも試しましたがやはり駄目でした。
■No30703に返信(かつおさんの記事)

>>派生ユーザーコントロールの作成手順はどのように行っていますでしょうか?
> 手順作成を明記します。
> 1.ソリューションにユーザーコントロールA,Bを追加
> 2.ユーザーコントロールB.Desiner.vbを起動し、継承先を手動で変更
> Partial Class ユーザーコントロールB
> Inherits System.Windows.Forms.UserControl
>       ↓
>     Inherits ユーザーコントロールA
>
・名前空間の違い
・タイプミス
・プロジェクトが異なるのにFriendになっている

などはないでしょうか?


今手元にあるのがProなのでかつおさんの環境にあるか分かりませんが
作成手順として無難なのは
(1)プロジェクトを右クリック(コンテキストメニュー表示)
(2)[追加]-[新しい項目]をクリック
(3)[Windows Forms]をクリック
(4)[継承されたユーザーコントロール]をクリック
(5)名前欄にコントロールクラス名を入力
(6)[追加]をクリック
(7)継承ピッカーで継承元を選択
(8)[OK]をクリック
が良いです。
■No30704に返信(shuさんの記事)
> ■No30703に返信(かつおさんの記事)
> ・名前空間の違い
> ・タイプミス
> ・プロジェクトが異なるのにFriendになっている
>
> などはないでしょうか?
こちらに関しては問題ありません。

詳細な手順を教えていただきありがとうございます。
しかし、下記のを試したところ、
> 今手元にあるのがProなのでかつおさんの環境にあるか分かりませんが
> 作成手順として無難なのは
> (1)プロジェクトを右クリック(コンテキストメニュー表示)
> (2)[追加]-[新しい項目]をクリック
> (3)[Windows Forms]をクリック
> (4)[継承されたユーザーコントロール]をクリック
> (5)名前欄にコントロールクラス名を入力
> (6)[追加]をクリック
> (7)継承ピッカーで継承元を選択
この時点で継承元コンポーネントの指定で、コンポーネントがひとつも表示されて
いませんでした。同画面の参照を押したところ参照ファイル名が「DLLファイル」となっていましたので、ユーザーコントロールがDLLとして作成されてないのでは?と考えています。
ただ、ツールボックスの[プロジェクト名 コンポーネント]には作成したユーザーコントロールが表示されています。

※ユーザーコントロール継承確認用に作ったプロジェクトでは上記の手順で、
上手くいきましたが開発中のプロジェクトでは最初に記載したエラーが出て
しまうため困ったものです。

> (8)[OK]をクリック
> が良いです。
>
■No30705に返信(かつおさんの記事)

ユーザーコントロールAとユーザーコントロールBのプロジェクトは
同じプロジェクトでしょうか異なるプロジェクトでしょうか?
異なる場合、Aの方のプロジェクトをDLL化してBのプロジェクトでAのDLLを
参照するか、1ソリューションにプロジェクトA,プロジェクトBをぶら下げて
プロジェクトBからプロジェクトAをプロジェクト参照する必要があります。
(参照でプロジェクトを選べばよい)
■No30706に返信(shuさんの記事)
> ■No30705に返信(かつおさんの記事)
>
> ユーザーコントロールAとユーザーコントロールBのプロジェクトは
> 同じプロジェクトでしょうか異なるプロジェクトでしょうか?
> 異なる場合、Aの方のプロジェクトをDLL化してBのプロジェクトでAのDLLを
> 参照するか、1ソリューションにプロジェクトA,プロジェクトBをぶら下げて
> プロジェクトBからプロジェクトAをプロジェクト参照する必要があります。
> (参照でプロジェクトを選べばよい)

同じプロジェクト内にあります。
ソリューションエクスプローラーでは以下の様になっています。

Project名
|
|-BBB
| |-ユーザーコントロールB
|
|-○○○
| |-ユーザーコントロール○
|
|-ユーザーコントロールA

新規で作成したユーザーコントロール継承確認用プロジェクトでは
上手く継承できますので、もう少し試行錯誤してみます。

DOBON.NET | プログラミング道 | プログラミング掲示板