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

継承ピッカーを使わずに継承したらデザインが、、、

環境/言語:[windowsXPPro VS.NET2005Pro]
分類:[.NET]

継承ピッカーというものがVB2005からあるのですが、自分で作ったMyFormを
継承してみようとおもい、SubFormというのを、新しい項目の追加の中の
「クラス」から作りました。

あえて「Windowsフォーム」から作るのはうまくいったので、今度は
「Windowsフォーム」ではなく、「クラス」から作りました。

そして「SubForm.Designer.vb」というファイルも同様に「クラス」を選択し
拡張子も自分で変えて作り、1行目をPartialとし、二行目に継承文を次のように

 Partial Class MyForm
Inherits MyForm

追加したところ、デザイン情報はちゃんとうまく継承されたように思えた
のですが、SubFormに自分でボタンなどを新規に追加すると
「SubForm.vb」という、コードを書く場所になにやらゲロゲロ記述され
せっかく用意したDesigner.vbに記述してくれません。


もしかしたらとおもい、正規ルート?で作成した既存のFormクラスのDesigner.vb
の一行目に書かれている

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _

も追加してみたのですが、だめでしたT_T

これは自分で「クラスファイル」から作ってしまうと、GUIでデザインを設計
した情報が自動的にDesigner.vbに吐き出されるようにするのは無理
なんでしょうか?
■No18760に返信(ほげほげたろうさんの記事)
> 「SubForm.vb」という、コードを書く場所になにやらゲロゲロ記述され
> せっかく用意したDesigner.vbに記述してくれません。

.vbproj ファイルにある <SubType> 要素が Form でないと IDE 的には認識してくれないかもしれません。(未検証です)
■No18763に返信(じゃんぬねっとさんの記事)
> ■No18760に返信(ほげほげたろうさんの記事)
>>「SubForm.vb」という、コードを書く場所になにやらゲロゲロ記述され
>>せっかく用意したDesigner.vbに記述してくれません。
>
> .vbproj ファイルにある <SubType> 要素が Form でないと IDE 的には認識してくれないかもしれません。(未検証です)

気になったので、Class1.vbにフォーム用のコードを乗せ、.vbproj ファイルの
<Compile Include="Class1.vb">
 <DependentUpon>Form1.vb</DependentUpon>
 <SubType>Form</SubType>
</Compile>
と書き換えてIDEを再起動し、新たにデザイナでコントロールを配置したところ、Class1.vbに記述されました。(Form1.resxが生成されましたが…)
しかし、ソリューションエクスプローラのClass1.vbをWクリックしたところ、デザイナが起動します。(コードの表示は問題なかったです)
以上のことから、あまり、このようなイレギュラーなことはしない方がいいのでは?と思います。
■No18779に返信(ぺがらぼさんの記事)
> ■No18763に返信(じゃんぬねっとさんの記事)
>>■No18760に返信(ほげほげたろうさんの記事)


> 以上のことから、あまり、このようなイレギュラーなことはしない方がいいのでは?と思います。

ぺがらぼさん、じゃんぬねっとさん、ありがとうございます!
やっぱり、イレギュラーなやり方だったんですね。継承の勉強をしてて
Inheritsキーワードを使いたくて、Classファイルをつくって、既存のフォームを
継承できるのかなー?って思って検証とりたかったんです。

でも、なかなかできなくて、Designer.vbもFormを形成するためには必要な
ファイルだということがわかり、なんだかんだでとっても勉強できました。

勉強不足のぼくのために代わりに検証までとっていただいて、本当に
ありがとうございました。

「イレギュラー」の一言ですっきり解決しました!本当にありがとうござい
ました。
すいません。かいけつしました。
解決済み!
■No18785に返信(ほげほげたろうさんの記事)
> やっぱり、イレギュラーなやり方だったんですね。

CLR 的には、全然イレギュラーではありません。
あくまでも、Visual Studio という IDE 上、イレギュラーなだけです。
解決済み!

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