Невозможно привести объект типа 'System.string' к типу '.... Event' - PullRequest
0 голосов
/ 24 марта 2020

Я делаю личный календарь / планировщик, и я хочу иметь возможность щелкнуть по четному значку в поле списка, чтобы он заполнил формы заголовка и времени. Я просматривал все посты на форумах по схожим вопросам, но они обычно выдают больше ошибок. В настоящее время, когда я нажимаю на событие в окне списка, программа завершает работу и выдает ошибку «Необработанное исключение», говоря: System.InvalidCastException: 'Unable to cast object of type 'System.String' to type 'ProjectName.Event'.'

. Этот код выдает ошибку:

    private void LstEvents_SelectedIndexChanged(object sender, EventArgs e)
    {
        btnDelete.Enabled = true; // When something is selected, enable delete button

        Event eventtest = (Event)lstEvents.SelectedItem; // <--- This line throws error
        txtTitle.Text = eventtest.eventTitle.ToString();
    }
* 1006. * И это мой класс Event:
public class Event
{
    int month, day, year, startHour, startMin, endHour, endMin;
    private DateTime startTime, endTime;
    public string eventTitle;

    public Event(int cMonth, int cDay, int cYear, int cStartHour, int cStartMin, int cEndHour, int cEndMin, string cEventTitle)
    {
        month = cMonth;
        day = cDay;
        year = cYear;
        startHour = cStartHour;
        startMin = cStartMin;
        endHour = cEndHour;
        endMin = cEndMin;
        eventTitle = cEventTitle;

        string tempDate = year.ToString() + "-" + month.ToString() + "-" + day.ToString() + " " + startHour.ToString() + ":" + startMin.ToString();
        startTime = DateTime.Parse(tempDate); // Convert startHour to DateTime

        tempDate = year.ToString() + "-" + month.ToString() + "-" + day.ToString() + " " + endHour.ToString() + ":" + endMin.ToString();
        endTime = DateTime.Parse(tempDate); // Do the same thing to endTime
    }

    public DateTime whenStartTime
    {
        get { return startTime; }
    }

    public DateTime whenEndTime
    {
        get { return endTime; }
    }

    public override string ToString()
    {
        return startTime.Year + "-" + startTime.Month + "-" + startTime.Day + " " + startTime.Hour + ":" + startTime.Minute; 
    }
}

Заполнение списка:

    private void BtnAdd_Click(object sender, EventArgs e)
    {
        Event newEvent;

        newEvent = new Event(monthCalendar.SelectionStart.Month, monthCalendar.SelectionStart.Day, monthCalendar.SelectionStart.Year,
                             Convert.ToInt32(cboStartHour.SelectedItem), Convert.ToInt32(cboStartMinute.SelectedItem),
                             Convert.ToInt32(cboStopHour.SelectedItem), Convert.ToInt32(cboStopMinute.SelectedItem),
                             txtDescription.Text.ToString());

        form.lstEvents.Items.Add(newEvent.ToString());
    }

1 Ответ

0 голосов
/ 24 марта 2020

lstEvents.SelectedItem является строкой; Вы хотите событие. То, как вы go перейдете от строки к событию, будет зависеть от того, что это за строка, и что такое класс lstEvents (и какие другие свойства у этого класса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...