2017-05-30 1 views
1

私は現在WinFormsでC#を使用してVisual Studio 2015でプロジェクトを作成しています。私は、「ツールボックスアイテム」を使ってdateTimePickers、テキストボックス、ラベルなどを参照していました。これは本当に大きなプロジェクトです。オブジェクトをドラッグアンドドロップすると、フォーマット済みです。例えば、datetimePickerのカスタムフォーマット、テキストボックスの整列などツールボックス項目のデフォルトプロパティを変更する方法は?

問題は、これらのオブジェクトのいくつかのプロパティをカスタマイズする必要があることです。これまでは、オーバーライド可能ないくつかのプロパティを変更できるコードがあります。

public partial class MoneyBox : TextBox 
{ 
    public override Color BackColor 
    { 
     get { return Color.Azure;} 
     set { base.BackColor = value; } 
    } 
} 

しかし、私はこれを行うことはできません。また、このオブジェクトは初期化されておらず、継承するとnullになるので、すでにフォーマットされたオブジェクトから継承することはできません。また、オブジェクトの初期化コンポーネントとペイントイベントをカスタマイズしようとしましたが、何らかの理由でオブジェクトに変更が表示されません。

public partial class DateTimePick : DateTimePicker 
{ 
    public void InitializeComponent() 
    { 
     InitializeComponent(); 
     this.Format = DateTimePickerFormat.Custom; 
     this.CustomFormat = "dd/MM/yyyy"; 
    } 
} 

ありがとうございます!

+0

ツールボックス項目をコピーして貼り付けると、設定されたプロパティが保持されます。 – Tod

+0

プロパティをオーバーライドする必要はありません。 'new'キーワードでプロパティを再定義することも非常にうまくいくので、デザイナーはそれに問題はありません。反射は常に正しいものを見つけることを可能にします。もちろん、あなたはいつでもあなた自身を追加することができます。 InitializeComponent()は、FormまたはUserControlが基本クラスである場合にのみ意味があります。 –

+0

@HansPassantは、あなたが意味することを本当に忘れていませんでした。 –

答えて

1

コンストラクタは、コントロールのプロパティを初期化するのに適した場所です。あなたがデザインサーフェイスにドロップしたときにほとんどのプロパティでは、カスタム値を持つコントロールを初期化するために、それは例えば、コンストラクタに新しい値を設定するだけで十分です:いくつかのケースでは

public class MyDateTimePicker : DateTimePicker 
{ 
    public MyDateTimePicker() 
    { 
     this.Format = DateTimePickerFormat.Custom; 
     this.CustomFormat = "dd/MM/yyyy"; 
    } 
} 

、例えばTextプロパティのために、ときにデザイン面にコントロールのインスタンスをドロップすると、プロパティはDesignerコントロールのInitializeNewComponentメソッドに設定されます。

0

これはあなたが探しているものと正確には異なる可能性がありますが、これを行うより良い方法があると確信していますが、これはデフォルトのコントロールプロパティのための私のソリューションでした。フォーム内のすべてのコントロール(およびその子コントロール)のリストを作成し、初期化時にプロパティを変更します。

public static void ChangeDefaultProperties(Control C)  
    { 
     var ControlQueue = new Queue<Control>(); 
     ControlQueue.Enqueue(C); 
     while (ControlQueue.Count > 0) 
     { 
      Control Current = ControlQueue.Dequeue(); 

      DefaultPropertiesOverride(Current); 
      foreach (Control c in Current.Controls) 
      { 
       ControlQueue.Enqueue(c); 
      } 
     } 
    } 

    public static void DefaultPropertiesOverride(Control C) 
    { 
     if(C is DateTimePicker) 
     { 
      ((DateTimePicker)C).Format = DateTimePickerFormat.Custom; 
      ((DateTimePicker)C).CustomFormat = "dd/MM/yyyy"; 
     } 
     if(C is TextBox) 
     { 
      ((TextBox)C).BackColor = Color.Azure; 
     } 
    } 

次に、ChangeDefaultProperties(this)を呼び出します。あなたのメインフォームの初期化で

関連する問題