我有自己的控制权:
public class newControl : Control
{
}
有一个Text
属性,但没有TextAlign
属性。例如,我需要此属性类似于TextAlign
的{{1}}属性,但我不想从按钮类继承它。
那么我只能继承Button
属性吗?如果是,怎么样?
答案 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,其中包含更多与样式相对应的属性,例如CssClass
和Attributes
。
我不建议使用TextAlign
属性,而是建议只在页面中添加CSS类,并使用set CssClass
属性,该属性位于基类WebControl
上。
或者,您可以通过执行以下操作来设置文本对齐方式(但CSS类更干净):
this.Attributes["style"] = "text-align: center";
当然,您也可以随时添加自己的属性,将正确的CSS写入Attributes
集合。
答案 2 :(得分:-2)
aaaa我认为一般都没有,这是不可能的老兄。你不能继承财产:D