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

C# 如何将新的现有属性添加到控件中?,c#,winforms,inheritance,properties,controls,C#,Winforms,Inheritance,Properties,Controls,我有自己的控制权: public class newControl : Control { } 有一个Text属性,但没有TextAlign属性。例如,我需要类似于按钮的文本对齐属性的此属性,但我不希望从按钮类继承它 所以我可以只继承TextAlign属性吗?如果是,如何?< P>首先,考虑继承,它具有与样式对应的更多属性,如 CssClass < /代码>和属性< /代码> .< 与其使用TextAlign属性,我建议您只需在页面中添加一个CSS类,并使用基类WebControl上的setC

我有自己的控制权:

public class newControl : Control
{
}
有一个
Text
属性,但没有
TextAlign
属性。例如,我需要类似于
按钮
文本对齐
属性的此属性,但我不希望从按钮类继承它


所以我可以只继承
TextAlign
属性吗?如果是,如何?

< P>首先,考虑继承,它具有与样式对应的更多属性,如<代码> CssClass < /代码>和<代码>属性< /代码> .< 与其使用
TextAlign
属性,我建议您只需在页面中添加一个CSS类,并使用基类
WebControl
上的set
CssClass
属性

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


<>当然,您可以添加您自己的属性,将正确的CSS写入到属性集合中。

首先,考虑继承,它继承了与样式对应的更多属性,如<代码> CssClass < /C> >和<代码>属性

与其使用
TextAlign
属性,我建议您只需在页面中添加一个CSS类,并使用基类
WebControl
上的set
CssClass
属性

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


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

是的,您可以添加它。内置枚举称为
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);
}

是的,你可以加上它。内置枚举称为
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);
}

从ButtonBase类继承会对您有所帮助吗?或者您不希望这样。否则,您需要为您的newControl创建自己的公共属性。问题是我不希望有很多不可用的属性等等。我当然看到了
ButtonBase
类,它不适合我。我需要控件中的
TextAlign
属性(具有正确的视觉效果),但不需要边框样式(例如)等等。。。问题是如果可能的话,怎么做。或者我需要找到任何其他已经包含我所需要的东西。谢谢你的回答!从ButtonBase类继承会对您有所帮助吗?或者您不希望这样。否则,您需要为您的newControl创建自己的公共属性。问题是我不希望有很多不可用的属性等等。我当然看到了
ButtonBase
类,它不适合我。我需要控件中的
TextAlign
属性(具有正确的视觉效果),但不需要边框样式(例如)等等。。。问题是如果可能的话,怎么做。或者我需要找到任何其他已经包含我所需要的东西。谢谢你的回答!但是我使用WinForms。。。我认为这不合适。我只想控制我需要的东西,别的什么都不要。我可以用很多好的属性继承
表单
,但我不需要太多的属性…哦,我已经用
winforms
标记了这个问题。我以为这是在网上,但我用WinForms。。。我认为这不合适。我只想控制我需要的东西,别的什么都不要。我可以用很多好的属性继承
表单
,但我不需要太多的属性…哦,我已经用
winforms
标记了这个问题。我以为这是在网上。谢谢,很好!但是你知道如何在这个属性上加上文字吗?也许这是一个有点愚蠢的问题,但我看不到我控制的文本。。。如何使此属性像按钮中一样工作?附言
.Text
!="";@只是不确定我是否明白。您的意思是当您将控件放在窗体上时,
this.Text
不会显示在控件上吗?@justAuser我添加了代码以显示
OnPaint
覆盖。由于这是您的自定义控件,因此您必须完成绘制所需显示内容的工作。非常感谢!我想这就是我要找的!现在我明白它是如何工作的了。)当我放置
this.Text=“something”时,文本不会出现,我想它必须出现在控件上)所以它可能会覆盖到另一个类上…谢谢,这很好!但是你知道如何在这个属性上加上文字吗?也许这是一个有点愚蠢的问题,但我看不到我控制的文本。。。如何使此属性像按钮中一样工作?附言
.Text
!="";@只是不确定我是否明白。您的意思是当您将控件放在窗体上时,
this.Text
不会显示在控件上吗?@justAuser我添加了代码以显示
OnPaint
覆盖。由于这是您的自定义控件,因此您必须完成绘制所需显示内容的工作。非常感谢!我想这就是我要找的!现在我明白它是如何工作的了。)当我放置
this.Text=“something”时,文本不会出现