2012-03-29 19 views
4

System.Windows.Forms.Buttonクラスを拡張してカスタムコントロールボタンを作成しました。System.Windows.Forms.Buttonを拡張し、c#のデフォルトのテキストを変更します。

私はデフォルトの.Text .Widthと.Heightを新しいクラスのコンストラクタに設定しました。

このコントロールをフォームにドロップすると、IDEはコンストラクタで指定された幅と高さに注意し、これらのプロパティを作成中の新しいボタンに割り当てますが、Textプロパティは無視され、 "ucButtonConsumables1"になるボタンのテキスト

私の選択した.Textをデフォルト値に設定する方法はありますか?

public partial class ucButtonConsumables : System.Windows.Forms.Button { 
    public ucButtonConsumables() { 

     this.Text = "Consumables";     
     this.Width = 184; 
     this.Height = 23; 

     this.Click += new EventHandler(ucButtonConsumables_Click); 

    } 

    void ucButtonConsumables_Click(object sender, EventArgs e) { 

     MessageBox.Show("Button Clicked") 

    } 

} 
+0

はなかったですあなたはプログラムを実行し、テキストがwhかどうかをチェックするあなたはどういう意味ですか?私はあなたがデザイナーでこれをチェックしていると感じています。あなたがそれを実行するときには当てはまりません。 – V4Vendetta

+0

ボタンのカスタムデザイナーと戦おうとしています。この戦いを勝つことは容易ではない、あなたは何かをしようとしている*非常に*珍しい。 *すべての*ボタンに同じテキストを与えることはほとんど意味がありません。 –

+0

はい - 私は確かにデザイナーと戦っています。デザイナーは、コントロールに名前を割り当て、.Textプロパティを同じに割り当てる必要があります。 – timothy

答えて

0

変更するには、派生クラスのTextプロパティをオーバーライドする必要があります。

public override string Text { get; set; } 
+0

プロパティをオーバーライドするだけで、値は設定されません。コントロールが読み込まれると、Textプロパティがリセットされます。 – Prakash

0

はい、コンストラクタでは実行できません。値が再び変更されないことが確実な場合は、このようにします。 Textプロパティをオーバーライドして定数を返します。

public override string Text 
    { 
     get 
     { 
      return "Consumables"; 
     } 
     set 
     { 
     } 
    } 
2

デザイナーのシリアル化から隠すTextプロパティ:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public override string Text 
{ 
    get { return base.Text; } 
    set { base.Text = value; } 
} 

またはデフォルト値を使用してデザイナーを作成します。

public class ConsumablesButtonDesigner : System.Windows.Forms.Design.ControlDesigner 
{ 
    public override void OnSetComponentDefaults() 
    { 
     base.OnSetComponentDefaults(); 
     Control.Text = "Consumables"; 
    } 
} 

そして、あなたのボタンにそのデザイナーを提供します。

[Designer(typeof(ConsumablesButtonDesigner))] 
public class ucButtonConsumables : Button 
{ 
    //... 
} 
+0

最初のオプションは、ボタンのデフォルトテキストを更新するためのコンパイルが必要です。 –

+0

上記の2番目の方法はうまく動作します。クリーンなリビルドなどを含む最初の方法は私のためには機能しませんでしたが、おそらく持続性があります。 – timothy

+0

@timothyプロジェクトをコンパイルする必要があります。コンパイル後、デフォルトのデザイナーのテキストはあなたのものに置き換えられます –

関連する問題