【问题标题】:moving object from listbox to another listbox in C# winform在 C# winform 中将对象从列表框移动到另一个列表框
【发布时间】:2012-11-21 06:33:43
【问题描述】:

如何将对象(包括名称和 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);

            }

【问题讨论】:

  • 建议的修复是否有效?如果是,请您接受答案吗?

标签: c# winforms listbox listboxitem


【解决方案1】:

线...

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

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

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

我想ActivityName 属性是String。所以这两行都存在设计错误。


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

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

...并在Parking_Services.Activity 类中覆盖ToString(),因此listbox 可以正确显示它们:

public class Activity
{
    ...

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

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

【讨论】:

    【解决方案2】:

    这是因为您没有将Parking_Services.Activity 类型的对象添加到列表框中,而是在以下行中添加了所选Parking_Services.ActivityActivityName

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

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

    listbox.Items.Add(lstActivity.SelectedItem);
    

    鉴于lstActivity 中的项目是Parking_Services.Activity 类型。

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      相关资源
      最近更新 更多