2012-10-12 3 views
7

カスタムコントロールの既定のプロパティを設定する方法、つまりデザイナで最初にフォームにドラッグするときの方法は?C#WinFormsカスタムコントロールの既定のプロパティ

ここやGoogleで回答が見つからない。私が得るのは、値を制約する方法だけです。

幅を使用&高さの例として、コンストラクタで高さを設定すると、デザイナが開かれるたびにコントロールに適用されます。ユーザーがプロパティを変更した後で再び適用されないデフォルトに設定するにはどうすればよいですか?

+0

これをベースクラスプロパティに適用する方法の例を教えてください。 –

+0

謝罪 - それは '[DefaultValue(someValue)]'です。ここにMSDNへのリンクがあります。http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge

+0

私はDefaultValue属性はあなたのものだと思います必要。 Visual Studio IDEは、属性に指定されている既定値をDesignerファイルに配置します。ユーザーがデフォルト値を他の値に変更すると、Visual Studio IDEはDesignerファイルを新しい値で更新します。これにより、既定値が既に上書きされているため、コントロールが再度開くときに前の値を再ロードすることができなくなります。 – jags

答えて

-1

コンストラクタで、キャンバスにドラッグしたときに表示するプロパティの値を設定します。 または、それらが基本コントロールの組み込みのプロパティである場合、それらをデザイナコードクラスに設定します。

+1

コンストラクタでプロパティを設定すると、デザイナが開かれるたびにそのプロパティが適用され、効果的に設定することはできません。 –

-1

以下では、フォームを表示するときに値を追加することができます。その後、フォームを設定することができます。

private int widthLength = 5; 

public int Width {  

    get { return widthLength ; } 
    set { widthLength = value; 
} 
+1

これを使用すると、コントロールがDesignerでフォームにドラッグされたときに、デフォルトのプロパティが適用されません。また、継承されたメンバを隠すことを警告するコンパイラもあります。警告によって指示されたとおりに「新規」を追加しても動作は変更されません。 –

5

DefaultValue属性を使用してください。

+1

これは、Heightの基本クラスプロパティがそのクラスによってオーバーライドされないため機能しません。 –

2

私が上書きできないプロパティの場合、new演算子を使用しています。たとえば、ListViewコントロールのMultiSelectプロパティです。私はMultiSelectをデフォルトのfalseにしたいと思っていますが、私はまだそれを変更したいと思っています。

その私はコンストラクタでfalseに設定、またはInitializeComponentで、(私は思う)問題は、デフォルト値がまだtrueであるということですので、私はデザイナーでtrueに値を設定した場合、デザイナー通知した場合trueがデフォルトであるため、既にデフォルトであると思うものに明示的に設定するのではなく、プロパティを設定するだけではありません。しかし、その値はコンストラクタに設定されているので、代わりにfalseになります。これは、コントロールがまだfalseいうよりtrue、および財産へのデフォルトはまだ上で切り替えることができる機能MultiSelect性質を持つことができます

/// <summary>Custom ListView.</summary> 
public sealed partial class DetailsListView : ListView 
{ 
    ... 

    [DefaultValue(false)] 
    public new bool MultiSelect { 
     get { return base.MultiSelect; } 
     set { base.MultiSelect = value; } 
    } 

は、私は、次のコードを使用し、この問題を回避するために、新しいコントロール。

EDIT:抽象的なフォームを使用する際に問題が発生しました。私は抽象フォームクラスを使用しています。具体的な実装では、デザイナを使用する必要があるときに切り替えます。私は、私が継承していたクラスを切り替えると、カスタムコントロールのプロパティが古いデフォルトにリセットされることがわかりました。私はカスタムコントロールのコンストラクタでプロパティをデフォルトに設定してこの動作を修正したようです。