如何将新的现有属性添加到我的控件中?

时间:2012-01-19 14:31:50

标签: c# winforms inheritance properties controls

我有自己的控制权:

public class newControl : Control
{
}

有一个Text属性,但没有TextAlign属性。例如,我需要此属性类似于TextAlign的{​​{1}}属性,但我不想从按钮类继承它。

那么我只能继承Button属性吗?如果是,怎么样?

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

首先,请考虑继承System.Web.UI.WebControls.WebControl,其中包含更多与样式相对应的属性,例如CssClassAttributes

我不建议使用TextAlign属性,而是建议只在页面中添加CSS类,并使用set CssClass属性,该属性位于基类WebControl上。

或者,您可以通过执行以下操作来设置文本对齐方式(但CSS类更干净):

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

当然,您也可以随时添加自己的属性,将正确的CSS写入Attributes集合。

答案 2 :(得分:-2)

aaaa我认为一般都没有,这是不可能的老兄。你不能继承财产:D