2017-12-20 7 views
0

メインウィンドウの中央にあるボタンだけを備えた小さなWinFormsアプリケーションがあります。ボタンのテキストはボタン1です。 InitializeComponentの呼び出し後に、コードビハインド(F7)のコンストラクタがボタンのテキストをHello Worldに変更します。WinForms DesignerはCodeBehindのメソッドを実行する必要がありますか?

ランタイムには「Hello World」と表示されますが、設計時にはデザイナーに「ボタン1」が表示されます。カスタムUIコードを実行するWinFormsの正しい方法は何ですか?デザイナーファイルにそのコードを手動で入れると、次にデザイナーが保存されたときに変更が無効になります。ここで

は私のコードです:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.button1.Text = "Hello World"; 
    } 
} 
+2

実行時と同じになるように、ボタンのテキストをプロパティウィンドウから変更することができます。 –

+0

フォームデザイナ( 'Form1.designer.cs')を入力して、コントロールのプロパティを手動で編集することもできます。 –

+0

'Form1'のconstrは、アプリケーションを起動した後にのみ実行されます。これが意図です。しかし、すべてのオブジェクトと要素を初期化した後ですぐに 'Text'を設定すると、デザイナークラスの' Text'をすでに設定することができます。ちなみに*コードはありません*、このクラスとデザイナークラスは 'partial'クラスなので、両方とも一つのクラス(Form1)を構成しますが、Form1のデザインはOutsourcedデザイナークラスを使用してコードを簡素化し、理解を深め、より明確な概要を表示します。 –

答えて

1

タイトルは言う:

のWinFormsデザイナーが分離コードからメソッドを実行する必要がありますか?あなたは設計新しいタイプForm1それは実際には、基本クラスFormのインスタンスを作成し、あなたがあなたのためにdesigner.csとリソースを生成し、それを修正するようになるされているので、

Designerは、注意が必要です。

コードをデザイナーで確実に実行するには、コードを基底クラスに移動する必要があります。これはカスタムコントロールを作ることによって達成することができます:あなたはそれから新しいフォームを継承するとき

public class MyForm: Form 
{ 
    protected button1; 

    public MyForm() 
    { 
     button1 = new Button { Text = "Hello World" }; // here 
     Controls.Add(button1); 
    } 
} 

は今、すべてのこれらのフォームは、ボタンを持つことになります。

public partial class Form1 : MyForm 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
} 

UserControlです。これを編集している間、コードの変更はデザイナーに直接表示されません。しかし、いったん終了したら、コンパイルして別のフォームに追加してください。デザイナーは、別のフォームを編集するときにコードを実行します。あなたがユーザーコントロールの背後にあるコードを変更するたびに、再度コンパイルする必要があります。

関連する問題