如何从提供的年份填充"Months"组合框和"Years"组合框,并使其值默认为上个月?



我需要让用户选择一个月和一年。通常,他们会选择最后一个月(例如,如果是2015年12月18日,他们通常会选择2015年11月)。所以我希望这些值是在组合框中预先选择的值。

我怎么能做到这一点(在C#中),并且在穿越卢比孔河(幼发拉底河?)到2016年1月时是"2015年12月"?

我还希望它不要添加2016,直到2016(随着年份的推移,以此类推),并从预定的年份开始(不一定是0年或1970年或类似的年份)。

您可以使用DateTimeFormatInfo.MonthNames查找区域性的月份名称。有些区域性具有13个月,因此DateTimeFormat.MonthNames返回一个具有13个月中的数组。

但由于你似乎想使用公历,你只需要使用12个月的名称,而我使用InvariantCulture来获得月份名称。

你可以使用这样的代码:

monthComboBox.DataSource = CultureInfo.InvariantCulture.DateTimeFormat
                                                     .MonthNames.Take(12).ToList();
monthComboBox.SelectedItem = CultureInfo.InvariantCulture.DateTimeFormat
                                        .MonthNames[DateTime.Now.AddMonths(-1).Month - 1];
yearComboBox.DataSource = Enumerable.Range(1983, DateTime.Now.Year - 1983 + 1).ToList();
yearComboBox.SelectedItem = DateTime.Now.Year;

您可以使用CurrentCulture或其他您喜欢的文化。

这应该有效(假设组合框所在的表单名为"mainForm",组合框名为"comboBoxMonth"one_answers"comboBoxYear"):

private void mainForm_Shown(object sender, EventArgs e)
{
    PopulateMonthsAndYears();
}
private void PopulateMonthsAndYears()
{ 
    const int DECEMBER = 11;
    const int BEGIN_YEAR = 1983; // KCMS
    comboBoxMonth.Items.AddRange(PlatypusConstsAndUtils.MonthsFull.ToArray<object>());
    comboBoxMonth.SelectedIndex = PlatypusConstsAndUtils.GetIndexForPreviousMonth();
    comboBoxYear.DataSource = Enumerable.Range(BEGIN_YEAR, DateTime.Now.Year - BEGIN_YEAR + 1).ToList();
    comboBoxYear.SelectedIndex = comboBoxYear.Items.IndexOf(DateTime.Now.Year);
    // However, if it is January (and thus the month is set to December), set the year to previous also
    if (comboBoxMonth.SelectedIndex == DECEMBER)
    {
        comboBoxYear.SelectedIndex = comboBoxYear.Items.IndexOf(DateTime.Now.Year - 1);
    }
}

以及举办月份vals的类别(当然,你可以将字符串vals改为西班牙语、德语、克林贡语或其他"让你的船漂浮"的单词):

public static class PlatypusConstsAndUtils
{
    public static List<string> MonthsFull = new List<string>
    {
            "January",
            "February",
            "March",
            "April",
            "May",
            "June",
            "July",
            "August",
            "September",
            "October",
            "November",
            "December"
    };
    public static int GetIndexForPreviousMonth()
    {
        // Months are 1-based, but return the index, which is 0-based, so decrement it
        const int JANUARY = 1;
        const int DECEMBER = 12;
        int prevMonth;
        int currentMonth = DateTime.Now.Month;
        if (currentMonth == JANUARY)
        {
            prevMonth = DECEMBER - 1;
        }
        else
        {
            prevMonth = DateTime.Now.Month - 2;
        }
        return prevMonth;
    }
    . . .

最新更新