将对象从列表框移动到C#winform中的另一个列表框

时间:2012-11-21 06:33:44

标签: c# winforms listbox listboxitem

如何将列表框中的对象(包括名称和ID)移动到另一个列表框并保存? 我写了这个:

 if (lstActivity.SelectedIndex != -1)
            {

                int intSelectedIndex = lstActivity.SelectedIndex;
                if (intSelectedIndex >= 0)
                {

 listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);

                    lstActivity.Items.RemoveAt(intSelectedIndex);
                }
            }

它有效,但是当我想保存它(点击按钮后)时,它会出现异常:“无法将syste.string转换为(Parking_Services.Activity)。”

  private void btnSave_Click(object sender, EventArgs e)
        {
            int intActivityID;
            Parking_Services.Service1 ii = new Parking_Services.Service1();
            for (int i = 0; i <= listbox.Items.Count; i++)                                            //save item from listbox is wrong
            {
                intActivityID = ((Parking_Services.Activity)listbox.Items[i]).ActivityID;
                string strMessage = ii.AllowUserActivityByType(intUserTypeID, intActivityID, FrmLogin.intUserId);

            }

2 个答案:

答案 0 :(得分:0)

这是因为您没有在列表框中添加Parking_Services.Activity类型的对象,而是在以下行中添加了所选ActivityName的{​​{1}}:

Parking_Services.Activity

我希望这是一个字符串。相反,你可以试试这个:

listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);

鉴于listbox.Items.Add(lstActivity.SelectedItem); 中的项目属于lstActivity类型。

答案 1 :(得分:0)

线......

intActivityID = ((Parking_Services.Activity)listbox.Items[i]).ActivityID;

...失败,因为listbox中的项目是String而不是Parking_Services.Activity。它们是String因为,您在行中添加了String ...

listbox.Items.Add(((Parking_Services.Activity)lstActivity.SelectedItem).ActivityName);

我认为ActivityName属性是String。因此,这两行中的任何一行都存在设计错误。


我建议进行以下修复:将整个Parking_Services.Activity对象添加到listbox ...

listbox.Items.Add((Parking_Services.Activity)lstActivity.SelectedItem);

...并覆盖ToString()课程中的Parking_Services.Activity,以便listbox正确显示它们:

public class Activity
{
    ...

    public override string ToString()
    {
        return ActivityName;
    }
}

在绘制列表条目时,ListBox始终在传递给它的ToString()上调用object。因此,通过覆盖ToString(),您可以控制Parking_Services.Activity的显示方式。