如何更改ToolBox项的默认属性?

时间:2017-05-30 15:41:48

标签: c# .net winforms visual-studio windows-forms-designer

我目前正在使用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";
    }
}

有什么想法吗?

提前致谢!

2 个答案:

答案 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);在主表单初始化