2012-01-19 11 views
0

私は自分のコントロールがあります。コントロールに新しいプロパティを追加するにはどうすればよいですか?

public class newControl : Control 
{ 
} 

Textプロパティがありますが、TextAlignプロパティがありません。たとえば、私はこのプロパティがButtonTextAlignプロパティに似ている必要がありますが、私はボタンクラスから継承したくありません。

私はTextAlignのプロパティだけを継承できますか?はいの場合、どうですか?

+0

あなたやあなたがalso..otherwiseあなたが必要だろうといけないButtonBaseクラスのヘルプから継承しますあなたのnewControlのために独自のパブリックプロパティを作成する。 – VS1

+0

問題は、私は使用できないプロパティなどがたくさんあることを望んでいないということです。私はButtonBaseクラスを見ていて、それは私には適していません。私のコントロールでは、(適切な視覚的な仕事で) 'TextAlign'プロパティが必要ですが、私はそこに境界線スタイル(例えば)は必要ありません...質問は可能です。あるいは、私が必要とするものがすでに含まれているものを見つける必要があります。ご回答ありがとうございます! – justAuser

答えて

3

はい、追加できます。列挙に建てContentAlignmentと呼ばれている:あなたは、このプロパティで行うことは、今あなた次第です

using System.ComponentModel; 
using System.Windows.Forms; 

public class newControl : Control { 

    private ContentAlignment _TextAlign = ContentAlignment.MiddleCenter; 

    [Description("The alignment of the text that will be displayed on the control.")] 
    [DefaultValue(typeof(ContentAlignment), "MiddleCenter")] 
    public ContentAlignment TextAlign { 
    get { return _TextAlign; } 
    set { _TextAlign = value; } 
    } 
} 

PropertyGridでコントロールがどのように使用されているかについていくつかの属性を追加しました。 DefaultValue属性はではなく、プロパティの値をに設定します。プロパティが太字で表示されるかどうかを判断するだけです。

あなたTextAlignプロパティを使用してテキストを表示するには、あなたがOnPaintメソッドをオーバーライドして、それを描画する必要があります:

protected override void OnPaint(PaintEventArgs e) { 
    switch (_TextAlign) { 
    case ContentAlignment.MiddleCenter: { 
     TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, Color.Empty, 
           TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter); 
     break; 
     } 
    case ContentAlignment.MiddleLeft: { 
     TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, Color.Empty, 
           TextFormatFlags.Left | TextFormatFlags.VerticalCenter); 
     break; 
     } 
    // more case statements here for all alignments, etc. 

    } 
    base.OnPaint(e); 
} 
+0

ありがとう、それは良いです!しかし、あなたはそれを正確にこのプロパティにテキストを配置する方法を知っていますか?それは少し愚かな質問かもしれないが、私は私のコントロールにテキストが表示されません...どのようにこのプロパティをボタンのように動作させるには? P.S. '.Text'!=" "; – justAuser

+0

@justAuserわかりません。あなたはこれを意味しますか?コントロールのフォームにコントロールを配置するとき、テキストは表示されません。 – LarsTech

+2

@justAuser 'OnPaint'オーバーライドを示すコードを追加しました。これはあなたのカスタムコントロールなので、表示したいものをペイントする作業が必要になります。 – LarsTech

-2

AAAAは​​、私は一般的にノーだと思うし、。あなたが財産を継承することはできません不可能男です:D

0

まず、CssClassAttributesとしてスタイリングに対応してより多くの特性を有するSystem.Web.UI.WebControls.WebControl、継承を検討してください。

TextAlignプロパティを使用するのではなく、ページにCSSクラスを追加し、基本クラスWebControlにあるセットCssClassのプロパティを使用することをおすすめします。

また、次の操作を実行してテキストの配置を設定できます(ただし、CSSクラスがきれいになります):もちろん

this.Attributes["style"] = "text-align: center"; 

を、あなたは常にへの正しいCSSを書き込み、独自のプロパティを追加することができますAttributesコレクションも同様です。

+0

しかし、私はWinFormsを使用します...私はそれが適切だとは思わない。私は、私が必要とするものだけを支配したいと思っています。私は多くの良い特性を持つ 'Form'を継承することができますが、私はそれらの多くを必要としません... – justAuser

+0

ああ、私は' winforms'でこの質問をタグ付けしました。私はこれがウェブ上にあると仮定しました。 – wsanville

+0

OK!ありがとう!申し訳ありませんが、私の間違いだった... – justAuser

関連する問題