繁体   English   中英

如何使用通用方法将组合框中的项目移动到列表框中

[英]How can I move items in a combobox to a listbox using a generic method

这是我的第一篇文章,所以请耐心等待。 使用C#,我有一个带有组合框和列表框的Windows窗体,并且想要将项目从一个对象移动到另一个对象。 我正在尝试创建一种方法,在该方法中可以传递这些对象,并让算法根据首先传递的对象进行工作。 到目前为止,这是我所拥有的,并且该算法可以在代码的其他地方使用(当我明确声明Combobox1而不是Obj1或Listbox1而不是Obj2时),但是我想从其in方法中删除它并创建自己的方法以允许任何包含列表项的对象(例如Listbox,Combobox等)的列表项的移动... Visual Studios说Obj1和Obj2在当前上下文中不存在,我认为是因为它们是在if块中定义的,但不确定如何解决。 任何帮助表示赞赏。

private void UpdateSelectionListing(object MoveFilesTo, object MoveFilesFrom)
    {
        /* Identify what object will have items moved to, 
         * and what objects will have items moved from */ 
        if (MoveFilesTo is ComboBox && MoveFilesFrom is ListBox)
            {
                ComboBox Obj1 = (ComboBox)MoveFilesTo;
                ListBox Obj2 = (ListBox)MoveFilesFrom;
            }
        else if (MoveFilesTo is ListBox && MoveFilesFrom is ComboBox)
            {
                ComboBox Obj2 = (ComboBox)MoveFilesTo;
                ListBox Obj1 = (ListBox)MoveFilesFrom;
            }

        for (int n = Obj1.Items.Count - 1; n >= 0; --n)
            {
                Obj2.Items.Add(Obj1.Items[n].ToString());
                Obj1.Items.RemoveAt(n);
            }
        } 

您将在if条件中创建实例,这将使其成为明显的错误 。此外,您还可以使其变得更容易,如下所示:

private void UpdateSelectionListing(object MoveFilesTo, object MoveFilesFrom)
 {
     ItemsControl ToObj=MoveFilesTo as ItemsControl;
     ItemsControl FromObj=MoveFilesFrom as ItemsControl;
     List<string> resultList=new List<string>();
      foreach (var item in FromObj.Items)
      {
         resultList.Add(item.ToString());
      }
      FromObj.ItemsSource=null;
      ToObj.ItemsSOurce=resultList;
      FromObj.Items.Refresh();
      ToObj.Items.Refresh();
 } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM