2010-12-03 8 views
0

Winform:InitializeComponentからインスタンスを移動できないのはなぜですか?

 private void InitializeComponent() 
    { 

     this.trackBar1 = new System.Windows.Forms.TrackBar(); 

を私は代わりにこれをしたい:

 private void instantiate() 
    { 

     this.trackBar1 = new System.Windows.Forms.TrackBar(); 
    } 

    private void InitializeComponent() 
    { 

     instantiate(); 

プログラムをコンパイルして実行するが、Visual Studioが、それ以上Winフォーム上のコントロールを描画することはできません

Visual Studioは、このコードを作成しました。これを修正するには?

アップデート:コードが自動的に生成されることはわかっていますが、ランタイムで実行されると設計時ではなく通常のC#コードとして実行されません。

私は本当にあなたが本当に問い合わせにシャーロック・ホームズにする必要があり、アップルのようなMicrosoftが彼らのIDEへタイトにコーダーのためのハードすべてのものを作っていると思われる:)

http://cocoawithlove.com/2009/02/interprocess-communication-snooping.html

+2

何か特別な理由*なぜ*あなたはこれをしたいですか?とにかく 'InitializeComponent'メソッドを修正するべきではありません。そのコードはデザイナーによって自動的に生成され、放置されることを好みます。 –

+0

私は自分の方法でコードを整理したいので、自分自身で生成したいので、部分的なクラスになる個別のモジュールを作成する方が簡単です。 – user310291

+0

@ user310291:この1つを信頼してください - マイクロソフトは、コーダーにとって難しいことになるとAppleのリーグにはいません。 – MusiGenesis

答えて

4

InitializeComponent()は自動的にによって生成された方法であり、デザイナー。それを変更すると、デザイナーがコントロールを読み込めなくなり、他の面白いことが起こることがあります。

正確に達成したいことはありますか?

+0

私は複数のプラットフォームプロジェクトを持っており、私は同じコード編成をしようとしました。このVisual Studioの依存関係は私のために迷惑です。とりわけ、私は彼らがこれを好きな理由を見出すことはできません。保護主義よりも本当に理由がないのは、独自のものです。 – user310291

1

Visual Studioでは、* .designer.csファイルのwhatsのみが表示されます。あなたがそれの外に何かを移動すると、あなたはどのようなコントロールを表示したいのかわかりません。

InitializeComponent以外のコントロールを作成する場合は、フォームのControl collectionに追加することを忘れないでください。

this.Controls.Add(trackBar1); 
+0

「知っている」とはどういう意味ですか?彼がInitializeComponentを呼び出すと、なぜその中の関数を呼び出せないのですか? – user310291

+0

これは、Visual Studioが 'InitializeComponent'を読み込んでコントロールのレンダリング方法を理解することを意味します。コントロールの初期化をこの関数の外に移動するとすぐに、Visual Studioは外部の何も知りません。つまり、表示されません。そして、他の人が触れたように、 'InitializeComponent'はデザイナーを表示するときに再生成されるので、それを変更することは役に立たないでしょう。 MusiGenesisのようにコンストラクタで 'InitializeComponent()'の呼び出しの後でinstansiateを呼び出すことができます。 – Patrick

+0

しかし、このセクションをPARSINGするのではなく、ファンクションコードのためにVisual Studioがメソッドを実行するだけでは、なぜ大したことはありませんか?合理的な理由は単なる商業的な理由です.Visual Studio以外のものを使わないようにしてください。 – user310291

1

あなたは、デザイナーを使用せずにフォームにコントロールをなどを追加し、あなたのinstantiate()方法で行うのではなく、よりInitializeComponent()方法を編集することによって、あなたのコントロールのコンストラクタからinstantiate()を呼び出したい場合。

IDEによって作成され維持されているメソッドを手作業で編集することは決してありません。そのためには、コードを手作業で編集することで問題が発生します。デザイナーが表示されていること

+0

コンストラクタから呼び出しようとしましたが、動作しません – user310291

+0

@ user310291:どうしたのですか?アプリケーションを起動したときに表示されない場合は、フォームのコントロールコレクションにコントロールを追加しましたか? Visual Studioのデザイナーに「表示されません」という意味の「機能しない」場合は、コードで自分で作業するのではなく、デザイナーでトラックバーコントロールを追加するのが最も簡単です。 – Patrick

+0

'trackBar1'はデザイナで追加したコントロールなので、' this.trackBar1 = new ... 'の行のためにコンストラクタからメソッドを呼び出すことはおそらく動作しません。 * after * 'InitializeComponent'が実行されます。コードにコントロールを追加する場合は、コントロールをデザイナーに追加しないでください。 – MusiGenesis

2

注エラーメッセージ:

メソッド 'System.Windows.Forms.Form.instantiate' が見つかりません。

それはフォームクラスはメソッドを持っているインスタンス化方法ではなく、フォーム派生クラスを持っていない文句れます。それは避けられませんが、タイプはデシリアライズされるまで存在せず、ベースクラスのメンバーにしか反映できません。

しかし、そうしないでください。デザイナーがフォームを再シリアル化してInitializeComponent()メソッドを再生成するとすぐにコードがスムーズに処理されます。このメソッドを編集すると、損失が保証されます。なぜあなたがしたいのかははっきりしていません。カスタムコンストラクタを使って基本フォームを作成し、それを継承することができます。