Рассчитать дни месяца на основе выбранного года и месяца - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь получить число дней, основанное на Годе (годы - это числа) и Месяце (являются текстом), выбранных в поле со списком.

Имя поля комбинированного года: cmbYear Название комбинированного месяца: cmbMonth

Событие запуска кода:

    private void cmbMonth_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cmbYear.SelectedIndex > -1)
        {
                {
                    var a = cmbDay;
                        a.Enabled = true;
                        a.BackColor = Color.LightCoral;
                }

                cmbMonth.BackColor = Color.Empty;
                MethodLibrary.Fill_cmbDay(cmbYear,cmbMonth, cmbDay);

Метод:

static class MethodLibrary //Method does not return something
{
    public static void Fill_cmbDay(ComboBox strYear, ComboBox strMonth, ComboBox  cmbTarget) //Void used does not return something
    {
        //Find how many days month has based on selected year & month. Convert month name to month number.
        int days = DateTime.DaysInMonth(Convert.ToInt32(strYear.SelectedItem), Convert.ToInt32(strMonth.SelectedItem));

        //Clear Combo box
        cmbTarget.Items.Clear();

        //Loop from 1 to number of days & add items to combo box
        for (int i = 1; i <= days; i++)
        {
            cmbTarget.Items.Add(i);
        }
    }
}

UserForm:

enter image description here

Ошибка в строке:

int days = DateTime.DaysInMonth(Convert.ToInt32(strYear.SelectedItem), Convert.ToInt32(strMonth.SelectedItem));

Я считаю, что ошибка происходит при преобразовании strMonth.SelectedItem в int32.

Помощь оценят.

enter image description here

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Сама причина исключения заключается в том, что вы пытаетесь преобразовать "January" строку в целое число . Попробуйте

 int days = DateTime.DaysInMonth(
   Convert.ToInt32(strYear.SelectedItem), // "2019" can be converted into 2019
   strMonth.SelectedIndex + 1);           // "January" can't; let's take Index then  
0 голосов
/ 02 апреля 2019

То, что у меня есть, и это работает для меня:

Триггер кода:

    private void cmbMonth_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cmbYear.SelectedIndex > -1)
        {
                {
                    var a = cmbDay;
                        a.Enabled = true;
                        a.BackColor = Color.LightCoral;
                }

                cmbMonth.BackColor = Color.Empty;
                int monthInDigit = DateTime.ParseExact(cmbMonth.SelectedItem.ToString(), "MMMM", CultureInfo.InvariantCulture).Month;
                MethodLibrary.Fill_cmbDay(cmbYear, monthInDigit, cmbDay);
        }
    }

Метод:

static class MethodLibrary //Method does not return something
{
    public static void Fill_cmbDay(ComboBox strYear, int Month, ComboBox  cmbTarget) //Void used does not return something
    {
        //Find how many days month has based on selected year & month. Convert month name to month number.
        int days = DateTime.DaysInMonth(Convert.ToInt32(strYear.SelectedItem),Month);

    //Clear Combo box
    cmbTarget.Items.Clear();

        //Loop from 1 to number of days & add items to combo box
        for (int i = 1; i <= days; i++)
        {
            cmbTarget.Items.Add(i);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...