プロが教えるわが家の防犯対策術!

visual studio 2008 express edition
C#3.5
を使用しています。

新しい項目の追加からフォーム画面をそれぞれ
「Base.cs」
public partial class Base : Form
{
public Base(int i)
{
InitializeComponent();
}
}

「CSharp.cs」
public partial class CSharp : Base
{
public CSharp(int i)
: base(i)
{

}
}
とCSharpクラスはBaseクラスを継承させるようにしたいのですが、
上のように引数付きコンストラクタで記述すると
「型 'Test.Base' にコンストラクタが見つかりませんでした。 」
というエラーが出てデザイン画面が表示されなくなります・・・
次のように
「Base.cs」
public partial class Base : Form
{
public Base()
{
InitializeComponent();
}
public Base(int i)
{
InitializeComponent();
}
}
Baseクラスに引数なしのコンストラクタを追加すれば問題なくデザイン画面が表示されるのですが、
これはvisual studioだから起こるエラーなのでしょうか?

A 回答 (2件)

私の経験上の話になりますが,デザイン画面では,対象とするフォームやユーザーコントロールおよびその先祖において,


引数無しのコンストラクタで実体化できないといけません (ドキュメントを現時点では見つけられていません)。
引数無しのコンストラクタが無い場合も,クラスがabstractである場合も,どちらも表示上のエラー原因になります。

あくまで表示上の問題なので,コンパイルは通りますし,実行も出来ます。
実行時エラーになってしまうことを覚悟で,
public Base ()
{
if (!DesignMode) { throw new InvalidOperationException(); }
}
と,デザインモード時のみ引数無しのコンストラクタを許すのもありかと思います。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
なるほど、そういうことだったんですね。
今、記述は同じままで再起動してやってみたら
今度はCSharpの方のデザイン画面に何も表示されなく(ただ実行画面は正常です)
なったり他にもいくつか挙動がおかしなところがあったので
いろいろ調べることが増えそうです・・・
とりあえずありがとうございました。参考になりました。

お礼日時:2009/05/01 16:27

System.ServiceModel.Web 参照設定。


ソリューションエクスプローラ WcfServiceTest右クリック
「参照の追加」「.NET」タブにて「System.ServiceModel.Web」OK
***.cs「using System.ServiceModel.Web」追記

(参考URL)
http://istb16.spaces.live.com/?_c11_BlogPart_Blo …

参考URL:http://istb16.spaces.live.com/?_c11_BlogPart_Blo …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
おそらくそのエラーではないと思います。
「型または名前空間名 'WebGet' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

ではなくて
「型 'Test.Base' にコンストラクタが見つかりませんでした。 」
というエラー表示だけなので、
一応それを追加して引数なしコンストラクタを外して試しましたが
同じ症状のままでしたので。

お礼日時:2009/05/01 16:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!