C# 使用组合框C获取月份的数值

C# 使用组合框C获取月份的数值,c#,.net,winforms,datetime,combobox,C#,.net,Winforms,Datetime,Combobox,我有一个组合框,我用它来选择一年中的一个月。月份通过我设置为数据源的列表提供。 我想我走错了方向 迄今为止的代码: private void btnExport_Click(object sender, EventArgs e) { int month = 0; //just a default value if (cbMonth.SelectedText == "January") month = 1; else

我有一个组合框,我用它来选择一年中的一个月。月份通过我设置为数据源的列表提供。 我想我走错了方向

迄今为止的代码:

private void btnExport_Click(object sender, EventArgs e)
    {
        int month = 0; //just a default value
        if (cbMonth.SelectedText == "January")
            month = 1;
        else if (cbMonth.SelectedText == "Febuary")
            month = 2;
        else if (cbMonth.SelectedText == "March")
            month = 3;
        else if (cbMonth.SelectedText == "April")
            month = 4;
        else if (cbMonth.SelectedText == "May")
            month = 5;   
        else if (cbMonth.SelectedText == "June")
            month = 6;   
        else if (cbMonth.SelectedText == "July")
            month = 7;   
        else if (cbMonth.SelectedText == "August")
            month = 8;   
        else if (cbMonth.SelectedText == "September")
            month = 9;   
        else if (cbMonth.SelectedText == "October")
            month = 10;  
        else if (cbMonth.SelectedText == "November")
            month = 11;  
        else if (cbMonth.SelectedText == "December")
            month = 12;

        int year = Int32.Parse(mtbYear.Text);
        MessageBox.Show(month.ToString() + "   " + year.ToString()); // to check values

    }
我的月份从不更改值,并显示为0。我理解这一点,因为我给了它初始值0,以便将它传递给另一个方法


问题:当用户从我的组合框中选择月份时,如何获取月份的数值?

您可以使用精确的日期时间方法。前-

var monthNumber = DateTime.ParseExact(cbMonth.SelectedText, "MMMM", CultureInfo.InvariantCulture).Month;

您可以使用DateTime的ParseExact方法。前-

var monthNumber = DateTime.ParseExact(cbMonth.SelectedText, "MMMM", CultureInfo.InvariantCulture).Month;

从列表中获取数值,即

<asp:DropDownList ID="cbMonth" runat="server">
    <asp:ListItem Selected="True" Value="1" Text="January"></asp:ListItem>
    <asp:ListItem Value="2" Text="February"></asp:ListItem>
</asp:DropDownList>

从列表中获取数值,即

<asp:DropDownList ID="cbMonth" runat="server">
    <asp:ListItem Selected="True" Value="1" Text="January"></asp:ListItem>
    <asp:ListItem Value="2" Text="February"></asp:ListItem>
</asp:DropDownList>

在字体结尾显示月份名称,但在值属性中以数字形式存储月份,当您在后台从组合框中选择月份时,您将以数字形式获取月份

在字体结尾显示月份名称,但在值属性中以数字形式存储月份,当您在后台从组合框中选择月份时背景你将得到一个数字的月份。嘿,每当你看到自己在使用这么多if-Else时,试着简化逻辑

IDictionary<string, int> monthsDictionary = new Dictionary<string, int>()
                                        {
                                            {January,"1"},
                                            {February, "2"},
                                            {March,"3"}
                                            /* And so on */
                                        };

我希望这有帮助

嘿,每当你看到自己在使用这么多if-else时,试着简化逻辑

IDictionary<string, int> monthsDictionary = new Dictionary<string, int>()
                                        {
                                            {January,"1"},
                                            {February, "2"},
                                            {March,"3"}
                                            /* And so on */
                                        };

我希望这有帮助

您是否尝试过组合框的SelectedValue

private void btnExport_Click(object sender, EventArgs e)
    {
        int month = 0; //just a default value
        var monthNumber = DateTime.ParseExact((string)cbMonth.SelectedValue, "MMMM", CultureInfo.InvariantCulture).Month;

        int year = Int32.Parse(mtbYear.Text);
        MessageBox.Show(monthNumber.ToString() + "   " + year.ToString()); // to check values

    }

别忘了为ParseExact添加try catch

您是否尝试过组合框的SelectedValue

private void btnExport_Click(object sender, EventArgs e)
    {
        int month = 0; //just a default value
        var monthNumber = DateTime.ParseExact((string)cbMonth.SelectedValue, "MMMM", CultureInfo.InvariantCulture).Month;

        int year = Int32.Parse(mtbYear.Text);
        MessageBox.Show(monthNumber.ToString() + "   " + year.ToString()); // to check values

    }
别忘了为ParseExact添加try catch

在组合框中显示月份:

选择当前月份:

comboBox1.SelectedIndex = DateTime.Now.Month - 1;
获取所选月份:

MessageBox.Show($"Month: {comboBox1.SelectedIndex + 1} - {comboBox1.SelectedItem}");
在组合框中显示月份:

选择当前月份:

comboBox1.SelectedIndex = DateTime.Now.Month - 1;
获取所选月份:

MessageBox.Show($"Month: {comboBox1.SelectedIndex + 1} - {comboBox1.SelectedItem}");

您应该调试代码并检查cbMonth.SelectedText的值是多少月份列表包含哪些类型的对象?那么cbMonth.SelectedText的值是多少?您检查过了吗?我还将研究您是否可以将组合框项目的值与要显示的文本分开设置-我希望这是可能的,这样您就可以适当地设置组合框项目,然后只获取值。@MikkaRin,我已经调试过了,尽管选择了月份,但值从空字符串中永远不会更改。@Lucian,我的列表包含一年中的月份作为字符串您应该调试代码并检查cbMonth.SelectedText的值是多少月份列表包含什么类型的对象?那么cbMonth.SelectedText的值是多少-您检查过了吗?我还将研究您是否可以将组合框项目的值与要显示的文本分开设置-我希望这是可能的,这样您就可以适当地设置组合框项目,然后只获取值。@MikkaRin,我已经调试过了,尽管选择了月份,但值从空字符串中永远不会更改。@Lucian,我的列表中包含了一年中的月份,我认为他说的是WinForms而不是ASP.NET Webforms。啊,那么,在这种情况下,他需要使用comboBox1.DisplayMember和Combobobox1.ValueMember之间的区别。我认为他说的是WinForms而不是ASP.NET Webforms。啊,在这种情况下,他需要使用comboBox1.DisplayMember和comboBox1.ValueMemberStrange.之间的差异。。当我第一次尝试该方法时,我一定是错误地使用了SelectedValue。你的回答对我有用!非常感谢你!所选月份的数值为索引+1。您不需要解析日期时间。加载组合框并轻松获取值。奇怪。。当我第一次尝试该方法时,我一定是错误地使用了SelectedValue。你的回答对我有用!非常感谢你!所选月份的数值为索引+1。您不需要解析日期时间。加载组合框并轻松获取值。您可以在一行代码中将月份加载到组合框中。您可以在一行代码中将月份加载到组合框中。您可能会问,为什么选择12,默认情况下,不是12个月在月份中吗?读这本书。你可能会问为什么要12个月,是不是默认的每月12个月?阅读。无需解析。选择索引+1就足够了。不需要解析。选择索引+1就足够了。