繁体   English   中英

使用用户控件时防止Winform Designer文件中的硬编码值

[英]Prevent hardcoded values in Winform designer file while using User Controls

我正在尝试包括一个自定义用户控件的日历,该日历选择月份和年份。 在用户控制代码中,我将两个属性(月份和年份)设置为当前月份和年份。

public MonthPicker()
    {
        InitializeComponent();
        m_MonthLabels = new Label[]
        {
        lblJanuary,
        lblFebruary,
        lblMarch,
        lblApril,
        lblMay,
        lblJune,
        lblJuly,
        lblAugust,
        lblSeptember,
        lblOctober,
        lblNovember,
        lblDecember
        };

        m_NotSelected = new Font("Sans Serif", 8.25F, FontStyle.Regular);
        m_Selected = new Font("Sans Serif", 8.25F, FontStyle.Bold);
        Month = DateTime.Now.Month;
        Year = DateTime.Now.Year;
        lblYear.Text = Year.ToString();
        groupBox2.Visible = false;
        groupBox1.Height = 20;
        CalendarIsDisplayed = false;
        CalendarIsNotChanged = false;
        SetMonthLabelSelected(Month);
    }

但是,当我将其包含在“应用程序”表单中时,设计人员将采用“月”和“年”的硬编码值。 因此,当月份更改时,它仍显示我的月份更大。

        // tsMonthPicker
        // 
        this.tsMonthPicker.BackColor = System.Drawing.SystemColors.Control;
        this.tsMonthPicker.CalendarIsDisplayed = false;
        this.tsMonthPicker.CalendarIsNotChanged = false;
        this.tsMonthPicker.Location = new System.Drawing.Point(104, 14);
        this.tsMonthPicker.Margin = new System.Windows.Forms.Padding(0);
        this.tsMonthPicker.Month = 1;
        this.tsMonthPicker.Name = "tsMonthPicker";
        this.tsMonthPicker.Size = new System.Drawing.Size(215, 20);
        this.tsMonthPicker.TabIndex = 6;
        this.tsMonthPicker.Value = new System.DateTime(2017, 1, 1, 0, 0, 0, 0);
        this.tsMonthPicker.Year = 2017;
        this.tsMonthPicker.Change += new Time_and_Billing_System.MonthPicker.MonthPickerChangeHandler(this.tsMonthPicker_Changed);
        this.tsMonthPicker.Load += new System.EventHandler(this.tsMonthPicker_Load);

如何在用户控件中更改代码,以便表单设计器文件自动采用-

this.tsMonthPicker.Month = System.DateTime.Now.Month;
this.tsMonthPicker.Year = System.DateTime.Now.Year;

将这两行放在Form_Load方法中,以嵌入此MonthPicker的形式。

    private void Form1_Load(object sender, EventArgs e)
    {
        this.tsMonthPicker.Month = System.DateTime.Now.Month;
        this.tsMonthPicker.Year = System.DateTime.Now.Year;
    }

在对象查看器中,选择“表单”对象后,选择“事件”视图(“闪电”),在列表中找到“加载”,双击该空间,此方法将出现在代码中。

您可以为此使用DesignMode属性。 您没有声明每次启动应用程序时是否需要默认值Now。 如果是这种情况,则您不需要DesignMode。

public MonthPicker() 
{
    if (this.DesignMode)
    {
        //These values are only set when the control is created in design mode
        this.tsMonthPicker.Month = System.DateTime.Now.Month;
        this.tsMonthPicker.Year = System.DateTime.Now.Year;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM