首页 > 解决方案 > 我正在尝试使用变量在 C# 中初始化 DateTime

问题描述

我在这里很新,所以我的问题可能很愚蠢,但我找不到与我的问题类似的东西。我正在 VS 2017 中编写一个 winforms 应用程序。我正在尝试使用可变的年份和月份初始化 DateTime。我的代码如下所示:

  int month = comboBox1.SelectedIndex;
  month++;
  label1.Text = month.ToString();
  DateTime dt = new DateTime(year,month,1);

每次用户单击组合框并选择不同的月份时,“月份”都会发生变化。年份相同,但它不会崩溃,我创建了一个标签,显示“月份”包含的内容(始终显示 1-12,具体取决于单击的月份)。

我收到一个超出范围的异常,说它不是有效的 DateTime。(比如第 13 个月或其他东西,但不是这样,因为我通过标签检查了它)

我可以观察到一个奇怪的行为:当“月”变量高于 6 时(我刚刚添加了另一个“月++”),它不会崩溃。虽然当我点击 12 月时它确实会崩溃,因为那时是 13 月。但这应该是标准的。

标签: c#winformsdatetime

解决方案


使用显示和值成员

像这样创建自定义类:

class Int_String
{
    //important to have get set part
    public _int { get; set; }
    public _string { get; set; }
}

现在,当创建表单时,像这样填充您的组合框:

List<Int_String> myList = new List<Int_String>();
myList.Add(new Int_String { _int = 1, _string = "January" };
myList.Add(new Int_String { _int = 2, _string = "February" };
myList.Add(new Int_String { _int = 3, _string = "March" };
myList.Add(new Int_String { _int = 4, _string = "April" };
myList.Add(new Int_String { _int = 5, _string = "May" };
myList.Add(new Int_String { _int = 6, _string = "Juny" };
myList.Add(new Int_String { _int = 7, _string = "July" };
myList.Add(new Int_String { _int = 8, _string = "August" };
myList.Add(new Int_String { _int = 9, _string = "September" };
myList.Add(new Int_String { _int = 10, _string = "October" };
myList.Add(new Int_String { _int = 11, _string = "November" };
myList.Add(new Int_String { _int = 12, _string = "December" };

myComboBox.DisplayMember = "_string";
myComboBox.ValueMember = "_int";
myComboBox.DataSource = myList;

现在,当您要创建DateTime变量时,您可以像这样创建它:

DateTime date = new DateTime(year, Convert.ToInt32(myComboBox.SelectedValue), 1);

推荐阅读