2

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

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

在此处输入图像描述

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

nikhil agrawal回答后编辑:

工作代码:

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

表单加载事件

        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",...)

4

3 回答 3

3

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

当失去对所有三个使用的关注时检查有效日期

DateTime.DaysInMonth(int year, int month);

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

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

于 2012-10-13T11:10:17.817 回答
1

我认为您是否想根据月份规范填充日期组合框值。你可以试试这段代码。它可能会帮助你。您在编写此代码时编写了一个 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());
    }
   }

像这样你也可以做其他月份的验证。

于 2012-10-13T12:55:05.003 回答
0

在 for 循环语句中写入 Item

像 cmbDay.Items.Add(i.ToString()); cmbDay.Items.Add(i.ToString());

于 2014-01-10T12:04:53.673 回答