Я делаю личный календарь / планировщик, и я хочу иметь возможность щелкнуть по четному значку в поле списка, чтобы он заполнил формы заголовка и времени. Я просматривал все посты на форумах по схожим вопросам, но они обычно выдают больше ошибок. В настоящее время, когда я нажимаю на событие в окне списка, программа завершает работу и выдает ошибку «Необработанное исключение», говоря: 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());
}