我需要让用户选择一个月和一年。通常,他们会选择最后一个月(例如,如果是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;
}
. . .