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
上的setCssClass
属性
或者,您可以通过执行以下操作来设置文本对齐方式(但是CSS类会更干净):
<>当然,您可以添加您自己的属性,将正确的CSS写入到
首先,考虑继承,它继承了与样式对应的更多属性,如<代码> CssClass < /C> >和<代码>属性
与其使用TextAlign
属性,我建议您只需在页面中添加一个CSS类,并使用基类WebControl
上的setCssClass
属性
或者,您可以通过执行以下操作来设置文本对齐方式(但是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”时,文本不会出现