• ベストアンサー

C#コンストラクタが2回動く

C#でユーザーコントロールを作成しますが、そのコントロールをフォームに配置時と実行時二回コンストラクタが動くのですが、これを実行時のみ一回にできませんか。お願いします。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

そういうものです。 ユーザーコントロールのインスタンスは、実行時だけでなく、デザイン時(配置時)にも、フォーム上に生成されます。 (そうしないと、独自なユーザーコントロールの見た目を、デザイン画面(配置先のフォーム上)に反映させることができません) どちらのモードで実行しているかは「DesignMode」で判別できますので、 実行時だけ処理したい(配置時に処理したくない)ものについては、コンストラクタ中などで、 --- if (!DesignMode) { // デザイン時に実行したくない処理 } --- のようなコードを書くしかないでしょう。 http://msdn.microsoft.com/ja-jp/library/system.componentmodel.component.designmode%28v=vs.110%29.aspx

noname#189001
質問者

お礼

そういう仕組みだったのですね、解決しました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • axuaxua
  • ベストアンサー率36% (82/223)
回答No.1

C#はいじった事がないですが、クラスの継承や明示的にコンストラクタを呼び出してないか確認してください。 応急処置としてはstaticな変数で実行したか記憶させ、実行していたら処理をスキップさせれば良いと思います。

noname#189001
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB2008でユーザーコントロールのイベントについて

    VB2008でユーザーコントロールのイベントについて 作成したユーザーコントロールを(1)フォームに配置した時のみ実行される (2)フォームを実行した時のみ実行される それぞれ処理を分けたいのですが、適切なイベントが見つかりません。 何か区分けのできる方法はあるのでしょうか? 何方か教えていただけませんか

  • コンストラクタについて

    プログラム初心者です classを使うときに使うコンストラクタについて教えてください なぜ自動で実行できるのか不思議です 質問1 このコンストラクタの使い道を教えてください。 質問2 PHPはC言語で作られているのですよね?コンストラクタを自動で実行しているC言語の処理はどうなっているのですか? 質問3 classと関数の違いがわかりません。ネットで調べると「classだと変数を保持できる」とでますが関数だと保持できないのでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP
  • コンストラクタについて

    VCの勉強をしています。 ちょっとショッキングなことを聞いてしまいました。 クラスのインスタンスを作成した場合、 コンストラクタは継承もとのコンストラクタもよばれる?? これって本当ですか!! MFCだとクラスの階層はだいぶ深いです。 例えば基本のCviewなんかはCObject>CCmdTarget>CWnd>Cviewの順に継承されています。 MFCでは更にCViewを継承したCTestViewなんてクラスがコードの主役です。 それでCTestViewのインスタンスを作成した場合、 コンストラクタはCTestViewのコンストラクタだけ実行すると思いますが、 ショッキングな内容ではCViewのコンストラクタも実行されてます。 これって本当にそうなるのでしょうか。 もし、そうならコンストラクタはてっぺんのCObjectから順に実行されますか。 それとも1つ上の継承先だけですか。 また、何でこんな仕組みにする必要があるのですか? 更にいえばCObjectにはSerializeという関数があります。 これをCTestView.serializeとした場合、 CObjectから順々にSerializeが呼び出されているのでしょうか? そんなことあるわけないよと、あまりにもバカバカしいのですが、 知人がそうだと言い張るのでよろしくお願いします。

  • C#継承について

    初心者です。クラスでテキストボックスを継承し、コンストラクタで値を設定していますが、 下記のコードをフォームに配置しても、テキストがabcにならないのですが、一回実行するとなります。なぜでしょうか。 できれば配置時にはすでにabcになってほしいのですが、お願いします。 public class Class1 : TextBox {   public Class1()   {     this.Text = "abc";   } }

  • コンストラクタの使い方?

    僕はまだJavaを勉強し始めて1ヶ月ぐらいの初心者なんですけども、現段階では基本的な文法を勉強し終えた(かなと思っている)ので、Swingのほうに早速とりかかりました。その際にすごく疑問に思ったことがあるので、皆さんにお尋ねします。 public class A ......main..... class B extends Frame{   public B(String stitle){    super(stitle);  } } super(stitle)のところでFrameクラスのコンストラクタが呼び出されていますよね。そこでFrameクラスのコンストラクタの定義を見てみると、僕が今まで学んできたような定義がなされていないんですけども。僕が今まで学んできたものというのは、 class Car {   private int num;   private double gas;   public Car()   {    System.out.println(車を作成しました。)   } } class C { ....main...   {    Car car1=new Car();   } } この場合の実行結果というのは、 「車を作成しました。」という文章が表示されはづですけど、これって言うのはSystem.out.println(車を作成しました。)のようにきちんと定義しているからですよね。それに対してFrameクラスのコンストラクタの定義には説明はあるものの、実行処理するための定義がされていないような気がするんですけども・・・。まだ僕はオブジェクト指向というものを理解できていないから、このようなわけのわからない質問をしている(と思う)のですが、よろしければどなたか分かりやすく教えてください。

    • ベストアンサー
    • Java
  • コンストラクタ?

    FireFox2のエラーコンソールで以下のようなユーザ定義クラスを作成しています。 期待する動作は、documentに、 12 と出力されることです。 が、FireFoxのエラーコンソールには、 エラー: NewClass is not a constructor ソースファイル: file:///C:82%AF%E3%83%88%E3%83%83%E3%83%97/docs/temp.html 行: 20 と表示されています。おそらく、NewClass の コンストラクタの書き方が誤っているのではないかと思いますが、webで調べても正しいコンストラクタの書き方 というのが見つけ切れませんでした。期待動作を満たす為にはどのようにかけばよいでしょうか? <script type="text/javascript"> function NewClass(){    /*ここが誤っている?*/ // } NewClass = { ClassValue1:1, ClassValue2:2, ClassFunc:function() {alert('わん');} } ClassTest = new NewClass(); document.write( ClassTest.ClassValue1 ); document.write( ClassTest.ClassValue2 ); </script>

  • メニューバーのイベントが2回実行される

    CommandBarControlでメニューバーを作成し、イベントを実行していますが、何故か2回実行されてしまいます。 具体的には、  Set myMenu = Application.CommandBars("Worksheet Menu Bar"). _ Controls.Add(Type:=msoControlPopup, before:=11) With myMenu .Caption = "User's MenuBar(xx)" With .Controls.Add .Caption = "フォームを開く" .OnAction = "OpenForm(2)" End With 上記で「フォームを開く」メニューバーを作成して、これを選択すると、UserForm1.Show というロジックが書かれているSubプロシジャーが実行されます。 これにより、フォームが開くのですが、どうもこのプロシジャーが2回実行されており、フォームが2つ開いているのです。 しかし、原因がわかりません。 対策としては、 1.2回実行される原因を調べる。 2.UserForm1が既に開いていたら開かないようにロジックを変更す   る。 1は皆無ですし、2はUserForm1が既に開いているかをチェックするロジックが分かりません。 どなたか教えて下さい。 よろしくお願いします m(_ _)m

  • C# コンストラクタ オーバーロード

    今C#を勉強しているのですが、よくコンストラクタがわかりません。初期化をする、というのは理解できるのですが、オーバーロードの際、 int get; string get2;    Person(int a )   { get=a; get2="ああ" } Person(int b,string a)   { get=b; get2=a } show() { Console.WriteLine("{0}{1}"get,get2); } メインメソッド Person p1 = new Person( 1); Person p2 = new Person(2,"あ"); p1.show(); p2.show(); こうすると出力結果が 1ああ 2あ になるはずですが、(わかりずらいですが、)自分の中ではnew演算子が呼ばれたときにが呼ばれて、変数に値が入ります。そして次のnew演算子でが呼ばれて値が上書きされるので2あ 2あ になると思うのですが。それともp1.show();の時点でもう一回コンストラクタが呼ばれているのでしょうか。要は上書きされるのか、showの時にコンストラクタが呼ばれ、その値で出力されるのか、です。

  • コンストラクタ

    public ref class Himoku_Data : public System::ComponentModel::Component { //フィールド private: array<System::String ^>^ Data; public: Himoku_Data(void) { // //TODO: ここにコンストラクタコードを追加します // this->Data = {"a","b","c","d",}; InitializeComponent(); } error C2059: 構文エラー : '{' h(26) : error C2143: 構文エラー : ';' が '{' の前にありません。 h(26) : error C2059: 構文エラー : '}' コンストラクタ作成でthis-Dataの行にエラーが出てしまいます。 原因がよくわからないのでおしえてください。

  • カスタムコントロール(ユーザーコントロール)について

    こんにちわ。 例えば、Visual Basic.NETにて、 カスタムコントロール1、カスタムコントロール2・・・etcと、幾つかのカスタムコントロールを作成しておいて、 プログラムの実行時に、フォーム上に配置されたボタン1をクリックすると、フォームにカスタムコントロール1が継承されて配置される、 と言った内容のプログラムを作成したいと考えています。 とはいえ、そのようなことが実際に可能なのかどうかもわかりませんし、そもそもカスタムコントロールの作成方法も理解していません。 そこで、カスタムコントロールの作成からその利用に至るまでを易しく解説してくれているような書籍等がございましたら、教えていただけないでしょうか? よろしくお願いいたします。

このQ&Aのポイント
  • Windows11にOSを変更した際、印刷ができなくなってしまいました。
  • PCのOSをWindows10からWindows11に変更したところ、プリンターでの印刷ができなくなった問題について相談します。
  • Windows11へのOS変更後、ブラザー製のプリンターでWEB上の資料の印刷ができなくなりました。
回答を見る

専門家に質問してみよう