visual studioのデザイナ画面でエラーがでる

このQ&Aのポイント
  • visual studio 2008 express editionを使用している際、デザイナ画面でエラーが発生します。解決するためには、Baseクラスに引数なしのコンストラクタを追加する必要があります。
  • visual studio 2008 express editionを使用している場合、デザイナ画面でエラーが発生する問題があります。この問題を解決するためには、Baseクラスに引数なしのコンストラクタを追加することが必要です。
  • visual studio 2008 express editionを使用している際、デザイナ画面でエラーが表示される場合があります。このエラーを解決するためには、Baseクラスに引数なしのコンストラクタを追加する必要があります。
回答を見る
  • ベストアンサー

visual studioのデザイナ画面でエラーがでる

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だから起こるエラーなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

私の経験上の話になりますが,デザイン画面では,対象とするフォームやユーザーコントロールおよびその先祖において, 引数無しのコンストラクタで実体化できないといけません (ドキュメントを現時点では見つけられていません)。 引数無しのコンストラクタが無い場合も,クラスがabstractである場合も,どちらも表示上のエラー原因になります。 あくまで表示上の問題なので,コンパイルは通りますし,実行も出来ます。 実行時エラーになってしまうことを覚悟で, public Base () { if (!DesignMode) { throw new InvalidOperationException(); } } と,デザインモード時のみ引数無しのコンストラクタを許すのもありかと思います。

takagoo100
質問者

お礼

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

その他の回答 (1)

  • goold-man
  • ベストアンサー率37% (8365/22183)
回答No.1

System.ServiceModel.Web 参照設定。 ソリューションエクスプローラ WcfServiceTest右クリック 「参照の追加」「.NET」タブにて「System.ServiceModel.Web」OK ***.cs「using System.ServiceModel.Web」追記 (参考URL) http://istb16.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3DC%2523

参考URL:
http://istb16.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3DC%2523
takagoo100
質問者

お礼

ご返答ありがとうございます。 おそらくそのエラーではないと思います。 「型または名前空間名 'WebGet' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 」 ではなくて 「型 'Test.Base' にコンストラクタが見つかりませんでした。 」 というエラー表示だけなので、 一応それを追加して引数なしコンストラクタを外して試しましたが 同じ症状のままでしたので。

関連するQ&A

  • 【C#】クラスのコンストラクタ引数参照渡しでエラー

    C#の.NETでWindowsアプリを作成しております。 C++/CLI経験はありますが、C#は全くの素人です。 AクラスからBクラスに、Cクラスを参照渡しで渡し、 BクラスにてCクラスのメンバ変数の値を書き換えた後、 Aクラスでその値を使用するといったプログラムを作成しようと思っています。 Bクラスを生成する際に、コンストラクタの引数渡しにて、 Cクラスを渡す書き方をしたのですが、下記エラー エラー CS0051: アクセシビリティに一貫性がありません。 パラメータの型 'ref Test.C' のアクセシビリティは メソッド 'Test.B.B(ref Test.C)' よりも低く設定されています。 が発生してしまい、解決法が分かりません。 何か根本的なことが間違っているのでしょうか。。 解決策をご存知の方おられましたら、ご教示お願い致します。 下記にサンプルコードを記載します。 【Aクラス】 B b = new B( C c ); 【Bクラス】 namespace Test { public partial class B : Form { public B(ref C c) // コンストラクタ { InitializeComponent(); } } } 【Cクラス】 namespace Test { class C { public int hoge; } }

  • スーパークラスのコンストラクタの呼び出し

    こんにちは。 スーパークラスに引数のあるコンストラクタと引数のないコンストラクタをサブクラスで継承する際の質問です。 具体的に書くと下記になります。 class A { A () {} A (int i) {} } class B extends A { } 何がわからないかというと 『スーパークラスのA()は、サブクラスのBでわざわざ明示的にスーパークラスのコンストラクタ呼び出しをしなくても問題ないというのはわかるのですが、なぜスーパークラスのA(int)は、呼び出さなくても良いのかということです。』 もしかしたら基礎中の基礎かもしれませんが、ご教授よろしくお願いいたします。

    • ベストアンサー
    • Java
  • C# 関数はどこに書くの?

    c#を始めました。 関数はどこに書けばよいのだろうと思い以下の2つのパターンを書きました。どちらも実行するとちゃんと動いています。 どちらの書き方が正しいのでしょうか?よろしくお願いいたします。 パターン1 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString());   //ここに関数を書く int tasu(int a10) { return a10 - 2; } } } パターン2 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a=3; int n= tasu(a); MessageBox.Show(n.ToString()); }   //ここに関数を書く int tasu(int a20) { return a20 -1; } }

  • デザイナの表示(Visual Studio 2008 )

    Visual Studio2008でMFCアプリケーションの作成を行なっています。 以前はVisualC# ExpressEditionのWindowsFormアプリケーションでアプリケーションの作成を行なっていました。しかし、製品版でしかサポートされていないMFCアプリケーションのみで動作するコンポーネントを使うことになり、開発環境をこちらに移行してきたところです。 そこで不明な点が出てきたので質問します。 今までC#ではデザイナの表示は「表示」→「デザイナ」もしくは、ソリューションエクスプローラの(Form_name).csをダブルクリックすることによりできました。 ですが、VisualStudio2008のMFCアプリでは最初にプロジェクトを作ったときはデザイナ画面が出ているのですが、2回目に開いてからはどこにも出ません。(project_name)Dlg.hのファイルの種類をフォームにするなど試したのですが、だめでした。出来る限りコードから生成するのは面倒なので避けたいです。 詳しい方お願いします。

  • Visual Studio 2010 professional でst

    Visual Studio 2010 professional でstrcpy_s()関数を使用しようとしているのですが, error C2660: 'strcpy_s' : 関数に 2 個の引数を指定できません。とエラーが出てしまいます. 実際のコードでは以下のように記述しています. strcpy_s(logfont.lfFaceName, cFontName); 具体的に取った行動は#include <string.h>を親クラスだけでなく子クラスでも宣言しました.しかし,インテリセンスも出ないためオーバーロードした関数の選択も出来ません.常に引数が3個の関数を勝手に呼び出そうとしてエラーが出ます. Visual Studio 2010 prfessionalにおいて引数が2つのstrcpy_s()関数を呼び出すためにはどうすればよろしいでしょうか. 私の知識と技術では解決することができないため,みなさんのお知恵を拝借できないでしょうか. 開発環境 Windows 7(32bit版) Visual Studio 2010 professional

  • Java初心者です、エラーの意味が理解できません

    今晩は。Java初心者です、宜しくお願いします。 下のようなコードを書きましたが、 「コンストラクタ'sub(int)'は未定義です」、 「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。 エラーの意味が理解できません。 1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。 2.Subには自動的にコンストラクタが生成されないのでしょうか。   されないとすれば、どの部分の書き方が悪いのでしょうか。 3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。 それとも全てコンストラクタの生成が原因なのでしょうか。 ========================================================================= class Sub { void disp(int a) { System.out.println("a = " + a ); } } public class クラス { public static void main(String[] args) { Sub s = new Sub(10); //コンストラクタ'sub(int)'は未定義です s.disp();     //型subのメソッド'disp(int)'は引数()に適用出来ません  } }

    • ベストアンサー
    • Java
  • Visual C# 2008 EE デザインビューエラー

    Visual C# 2008 EE デザインビューエラー お世話になっております。 ASP ではないのですが、C# に関する件のため、こちらに投稿させていただきました。 【環境】  Visual C# 2008 Express Edition  .NET Framework 3.5 【現象】  コントロールをデザインビューで開いた際に、Visual C# がエラーで強制終了してしまう。  ※参照:添付ファイル「visualC#_error.jpg」 【詳細】  BasePage.cs → public partial class BasePage : UserControl  IndexPage.cs → public partial class IndexPage : BasePage  このように、UserControl を継承した BasePage クラスと、そのクラスを継承した IndexPage クラスが存在します。  このような関係で、IndexPage クラスをデザインビューで開いた際に、強制終了してしまいます。  IndexPage.cs のコードの表示を行ったり、BasePage クラスをデザインビューで開いた際には、強制終了せずに正常に動作します。  プロジェクト作成当初は、IndexPage クラスを開いても問題なくデザインビューが見れていました。いつごろからかこのような状態になってしまいました。  IndexPage クラスだけでなく、その他 BasePage クラスを継承しているクラスをデザインビューで確認すると強制終了してしまいます。 なにか心当たりのある方がいらっしゃいましたら、 ご教示よろしくお願いいたします。  

  • クラスがメンバーとしてクラスを持つ時の宣言について

    自作クラスMainClassがMyClassというクラスをメンバー変数として持つ場合、宣言時に引数をいくつか持つコンストラクタを呼び出そうとすると構文エラーとなります。 class MyClass { public: MyClass(int, int); } class MainClass { private: MyClass myclass(10,10); } このような宣言はできないのでしょうか。 引数なしのコンストラクタは呼び出せているようです。

  • オブジェクト指向について質問

    メインのクラスをインスタンスする際にコンストラクターに書かれている処理が実行されますが、オブジェクトが生成された時のイベントに書くのと、どのような違いがありますか? public partial class Form1 : Form{ public Form1()//コンストラクター {処理1} private void Form1_Load(object sender, EventArgs e)//インスタンス時のイベント {処理2} } また、別クラスの中でnewを使ってインスタンスがされ場合、コンストラクターと上記のイベントは同じように発生しますか? public class Form2{ Form1 = new Form1(); } よろしくおねがいします。

  • C#について

    最近C#を勉強しはじめました。 メインのform1からボタンをクリックして別のダイアログを出しています。 そこで質問なのですが、メインのform1(親?)のグローバル変数を、 form2(子?)に渡したいのです。 グローバル変数は初期化時に-1を代入しているのですが、子のダイアログをコール時に親の初期化のところがなぜかコールされてしまい、子に渡すときは-1になってしまいます。 親のソース。グローバル変数はint型のaaaです。 namespace test { public partial class Form1 : Form {     int aaa; public Form1() { InitializeComponent(); aaa = -1; } //ボタンクリック時の関数 private void OpenMenuToolStripMenuItem_Click(object sender, EventArgs e) {       aaa = 0; Form2 f2 = new Form2(); Form2.ShowDialog(); } } } //子のソース、こっちのダイアログをコールする前にpublic partial class Form1 : Formのところが //コールされてaaaには-1が代入されてしまい、bbbに入れるときには-1になってしまいます。 namespace test { public partial class Form2 : Form { public Form2() { InitializeComponent(); Form1 f1 = new Form1(); int bbb = f1.aaa; } } } こういったやり方は普通やらないのでしょうか? 正しい方法、もしくは何か別のものが原因なのでしょうか? 初歩的な質問で申し訳ないですがよろしくお願いします。

専門家に質問してみよう