C# 无法强制转换类型为';System.string';要键入';。。。。事件';

C# 无法强制转换类型为';System.string';要键入';。。。。事件';,c#,C#,我正在制作一个个人日历/计划表,我希望能够在列表框中单击一个偶数,并让它填写标题和时间表单。我一直在搜索每一个关于类似问题的论坛帖子,但他们通常只会给出更多的错误。当前,当我单击列表框中的事件时,程序退出并只给出一个未处理的异常错误,即System.InvalidCastException:“无法将'System.String'类型的对象强制转换为'ProjectName.event'。 这是引发错误的代码: private void LstEvents_SelectedIndexCha

我正在制作一个个人日历/计划表,我希望能够在列表框中单击一个偶数,并让它填写标题和时间表单。我一直在搜索每一个关于类似问题的论坛帖子,但他们通常只会给出更多的错误。当前,当我单击列表框中的事件时,程序退出并只给出一个未处理的异常错误,即
System.InvalidCastException:“无法将'System.String'类型的对象强制转换为'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();
    }
填充列表框:

    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());
    }

lstEvents.SelectedItem是一个字符串;你想要一个活动。从字符串到事件的转换方式将取决于该字符串是什么,以及lstEvents是什么类(以及该类具有什么其他属性)。

listEvents应该是事件对象的列表,但我想当我将它们放在列表框中时,我会将其转换为字符串。不确定如果列表框中的信息不是字符串,您将如何在列表框中显示该信息。显示时将调用ToString函数。如其他人所述,您可以将事件直接添加到lstEvents。您可以演示如何填充列表框吗?看起来您正在使用字符串集合填充列表框。您应该用事件列表填充它。显示
lstEvents
的定义/类型和/或使用您正在使用的UI框架标记问题会很有帮助,但错误消息描述了问题:字符串
事件
之间没有转换@Sam尝试删除ToString。所以只需
form.lstEvents.Items.Add(newEvent)
@Sam yup,这是出于设计:)“显示的项目通常是字符串;但是,可以使用任何对象。控件中显示的文本是对象的ToString方法返回的值。”
    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());
    }