【问题标题】:show date in three combo boxes在三个组合框中显示日期
【发布时间】:2012-10-13 11:04:56
【问题描述】:

我是 .net 的初学者。我需要在三个不同的组合框中显示daymonthyear。为了让它们填满,我尝试了从 1950 年到现在的硬编码值。后来我意识到我还需要检查 2 月(28 天)、闰年和其他问题。有没有其他方法可以在不对值进行硬编码的情况下做到这一点。

在互联网上搜索答案时,我遇到了我不想使用的 datepicker 和 monthcalendar(因为我的项目应该与使用 datepicker 和 monthcalendar 的其他朋友不同)。或者如果您有任何其他建议而不是组合框,请分享。

我相信以前有人问过这个问题。我不介意你直接链接。

nikhil agrawal 的回答之后编辑:

工作代码:

cmbDay    --->  combobox
cmbMonth  --->  combobox
cmbYear   --->  combobox

FormLoad 事件

        this.cmbYear.Leave+=new EventHandler(cmbYear_Leave);
        this.cmbDay.Leave += new EventHandler(cmbYear_Leave);
        this.cmbMonth.Leave += new EventHandler(cmbYear_Leave);
        //
        for (int i = 1950; i < 2012; i++)
        {
            cmbYear.Items.Add(i.ToString());
        }
        for (int i = 1; i < 32; i++)
        {
            cmbDay.Items.Add(i.ToString());
        }
        //
        cmbDay.SelectedIndex = 0;
        cmbMonth.SelectedIndex = 0;
        cmbYear.SelectedIndex = 0;

OnLeave 事件

private void cmbYear_Leave(object sender, EventArgs e)
    {
        int day = DateTime.DaysInMonth(Convert.ToInt32(cmbYear.Text), cmbMonth.SelectedIndex+1);                       
        if (day <= cmbDay.SelectedIndex)
        {
            //alert message or your managing code.
        }
    }             

PS:cmbMonth 是字符串格式 ("Jan","Feb","Mar",...)

【问题讨论】:

    标签: c# .net winforms c#-4.0 combobox


    【解决方案1】:

    用所有可能的值填充这三个值,例如日期 1 到 31、1 月到 12 月以及 1950 年到今年。

    使用

    检查失去对所有三个焦点的有效日期
    DateTime.DaysInMonth(int year, int month);
    

    对于年份,您可以直接将所选项目转换为 int,对于月份,您可以找到 selectedindex +1(因为索引是基于 0 的)。

    现在在失去焦点(所有三个失去焦点上的一个失去焦点事件)检查日期是否小于或等于方法返回的天数。如果没有,那么警报消息或其他东西。

    【讨论】:

    • 是的,这是我想发布的更简单的解决方案
    • 我不明白在所有三个组合框上保持单个丢失焦点事件的概念。如何做到这一点。
    • 编写一个方法并挂钩所有组合框以引用同一事件。
    【解决方案2】:

    我想您是否想根据月份规范填充日期组合框值。 你可以试试这段代码。它可能会帮助你。你写了一个 cmbobox selectedIndexChange 事件在那写这段代码。

     if(cmbMonth.Text=="feb")  //if(cmbMonth.SelectedIndex.Equals(specify index))
      {
        for(i=0;i<29;i++)
        {
           cmbDay.Item.Add(i.ToString());
        }
      }
      else
       {
        for(i=1;i<32;i++)
        {
           cmbDay.Item.Add(i.ToString());
        }
       }
    

    这样您也可以进行其他月份的验证。

    【讨论】:

      【解决方案3】:

      写 for循环语句中Item的s

      喜欢 cmbDay.Items.Add(i.ToString()); cmbDay.Items.Add(i.ToString());

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 1970-01-01
        相关资源
        最近更新 更多