我目前正在使用WinForms中的C#在Visual Studio 2015中创建项目;我使用了" ToolBox项目"引用dateTimePickers,文本框,标签等。这是一个非常大的项目,如果我可以拖放对象并且它们已经有格式,它将节省我很多时间;例如datetimePicker自定义格式,textbox align等。
问题是我需要自定义这些对象的一些属性。到目前为止,我有这段代码,允许我更改一些可覆盖的属性。
public partial class MoneyBox : TextBox
{
public override Color BackColor
{
get { return Color.Azure;}
set { base.BackColor = value; }
}
}
但对于其他属性,我不能这样做。此外,我无法从已经格式化的对象继承,因为此对象尚未初始化,并且在继承时为null。我还尝试自定义初始化组件和对象的绘制事件,但由于某种原因,更改不会在对象上显示。
public partial class DateTimePick : DateTimePicker
{
public void InitializeComponent()
{
InitializeComponent();
this.Format = DateTimePickerFormat.Custom;
this.CustomFormat = "dd/MM/yyyy";
}
}
有什么想法吗?
提前致谢!
答案 0 :(得分:1)
构造函数是初始化控件属性的合适位置。对于大多数属性,当您将控件放在设计图面上时使用自定义值初始化控件,它足以在构造函数中设置新值,例如:
public class MyDateTimePicker : DateTimePicker
{
public MyDateTimePicker()
{
this.Format = DateTimePickerFormat.Custom;
this.CustomFormat = "dd/MM/yyyy";
}
}
在某些情况下,例如对于Text
属性,当您在设计图面上删除控件的实例时,该属性将在InitializeNewComponent
控件的Designer
方法中设置。
答案 1 :(得分:0)
这可能不是您正在寻找的,我确信有更好的方法,但这是我的默认控件属性的解决方案。它会列出表单中的所有控件(及其子控件),并在初始化时更改属性。
public static void ChangeDefaultProperties(Control C)
{
var ControlQueue = new Queue<Control>();
ControlQueue.Enqueue(C);
while (ControlQueue.Count > 0)
{
Control Current = ControlQueue.Dequeue();
DefaultPropertiesOverride(Current);
foreach (Control c in Current.Controls)
{
ControlQueue.Enqueue(c);
}
}
}
public static void DefaultPropertiesOverride(Control C)
{
if(C is DateTimePicker)
{
((DateTimePicker)C).Format = DateTimePickerFormat.Custom;
((DateTimePicker)C).CustomFormat = "dd/MM/yyyy";
}
if(C is TextBox)
{
((TextBox)C).BackColor = Color.Azure;
}
}
然后只需调用ChangeDefaultProperties(this);在主表单初始化