好像CodeProject里有功能非常强大的类似控件,这里没必要用自定义控件。
左右移动就是简单的选择项增加删除,上下移动使用了高级语法,值得一学。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using WinForm = System.Windows.Forms;

public static class ListBoxExtension
{
    public static bool MoveSelectedItems(this WinForm.ListBox listBox, bool isUp, Action noSelectAction)
    {
        if (listBox.SelectedItems.Count > 0)
        {
            return listBox.MoveSelectedItems(isUp);
        }
        else
        {
            noSelectAction();
            return false;
        }
    }

public static bool MoveSelectedItems(this WinForm.ListBox listBox, bool isUp)
    {
        bool result = true;
        WinForm.ListBox.SelectedIndexCollection indices = listBox.SelectedIndices;
        if (isUp)
        {
            if (listBox.SelectedItems.Count > 0 && indices[0] != 0)
            {
                foreach (int i in indices)
                {
                    result &= MoveSelectedItem(listBox, i, true);
                }
            }
        }
        else
        {
            if (listBox.SelectedItems.Count > 0 && indices[indices.Count - 1] != listBox.Items.Count - 1)
            {
                for (int i = indices.Count - 1; i >= 0; i--)
                {
                    result &= MoveSelectedItem(listBox, indices[i], false);
                }
            }
        }
        return result;
    }

public static bool MoveSelectedItem(this WinForm.ListBox listBox, bool isUp, Action noSelectAction)
    {
        if (listBox.SelectedItems.Count > 0)
        {
            return MoveSelectedItem(listBox, listBox.SelectedIndex, isUp);
        }
        else
        {
            noSelectAction();
            return false;
        }
    }

public static bool MoveSelectedItem(this WinForm.ListBox listBox, bool isUp)
    {
        return MoveSelectedItem(listBox, listBox.SelectedIndex, isUp);
    }

private static bool MoveSelectedItem(this WinForm.ListBox listBox, int selectedIndex, bool isUp)
    {
        if (selectedIndex != (isUp ? 0 : listBox.Items.Count - 1))
        {
            object current = listBox.Items[selectedIndex];
            int insertAt = selectedIndex + (isUp ? -1 : 1);

listBox.Items.RemoveAt(selectedIndex);
            listBox.Items.Insert(insertAt, current);
            listBox.SelectedIndex = insertAt;
            return true;
        }
        return false;
    }
}

这个类大概看了看,写得很棒。不管了,只管用。

public partial class FrmReportSet : Form
{
    public FrmReportSet()
    {
        InitializeComponent();
    }

private void btnAdd_Click(object sender, EventArgs e)
    {
        List<Object> listObj = new List<object>();
        foreach (Object obj in lboxCanUse.SelectedItems)
        {
            lboxSelected.Items.Add(obj);
            listObj.Add(obj);
        }
        foreach (Object obj in listObj)
        {
            lboxCanUse.Items.Remove(obj);
        }
    }

private void btnRemove_Click(object sender, EventArgs e)
    {
        List<Object> listObj = new List<object>();
        foreach (Object obj in lboxSelected.SelectedItems)
        {
            lboxCanUse.Items.Add(obj);
            listObj.Add(obj);
        }
        foreach (Object obj in listObj)
        {
            lboxSelected.Items.Remove(obj);
        }
    }

private void btnUp_Click(object sender, EventArgs e)
    {
        this.lboxSelected.MoveSelectedItems(true, () =>
        {
            MessageBox.Show("请选择");
        });
    }

private void btnDown_Click(object sender, EventArgs e)
    {
        this.lboxSelected.MoveSelectedItems(false, () =>
        {
            MessageBox.Show("请选择");
        });
    }
}

没注释,估计从Button名字应该能看出来。
url:http://greatverve.cnblogs.com/archive/2011/09/13/listbox-add-remove-up-down.html

两个ListBox中的项互相移动及上下移动相关推荐

  1. 使用javascript实现两个listbox中list的移动

    说明: 1.ListBox为服务器端控件,list可以在服务器端初始化 2.Button可以为服务器端,也可以为客户端控件: 如果为服务器端控件,需要在页面初始化的时候为其添加事件处理为: btn_u ...

  2. 【Vegas原创】使用javascript实现两个listbox中的添加、删除

    1.ListBox为服务器端控件,list可以在服务器端初始化 2.Button可以为服务器端,也可以为客户端控件: 如果为服务器端控件,需要在页面初始化的时候为其添加事件处理为:    btn_up ...

  3. js 实现查找两个数组中的不同项——基础积累

    今天遇到一个需求,就是select的多选下拉,根据选中的值再进行相应的处理.比如当前选中了['山东','浙江','深圳']三项内容,现在去掉中间的深圳,我需要拿到去掉的是哪一项. 我想的方式就是: w ...

  4. python去重复排序_Python实现删除排序数组中重复项的两种方法示例

    本文实例讲述了Python实现删除排序数组中重复项的两种方法.分享给大家供大家参考,具体如下: 对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度 注意:不 ...

  5. android 去重 比较两个list_android 去重 比较两个list_Android 去除list集合中重复项的几种方法...

    因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...

  6. android 去重 比较两个list_Android 去除list集合中重复项的几种方法

    因为用到list,要去除重复数据,尝试了几种方法.记录于此... 测试数据: List li1 = new List { "", "", "" ...

  7. (9)C#之ADO.NET 两个ListBox联动案例

    这次的案例是做两个ListBox的联动,例如第一个ListBox显示的是全国各省份的名称,然后在用户点击某一个省份的同时,第二个ListBox显示出该省份的各城市的名字. ①这需要在数据库中创建一张表 ...

  8. insert 语句的选择列表包含的项多于插入列表中的项_如何定义和使用Python列表(Lists)

    Python中最简单的数据集合是一个列表(list).列表是方括号内用逗号分隔的任何数据项列表.通常,就像使用变量一样,使用=符号为Python列表分配名称. 如果列表中包含数字,则不要在其周围使用引 ...

  9. 【WPF】拖拽ListBox中的Item

    原文:[WPF]拖拽ListBox中的Item 整理了两个关于WPF拖拽ListBox中的Item的功能.项目地址 https://github.com/Guxin233/WPF-DragItemIn ...

最新文章

  1. 对称加密和非对称加密
  2. Google、Facebook、亚马逊、Uber等硅谷顶尖AI专家团北京聚首 ,这场AI开发者盛会不可错过
  3. Ranking relevance in yahoo search (2016)论文阅读
  4. 简单谈谈haskell
  5. 【Linux系列】mac终端与服务器连接
  6. php 获取父类名称,[typecho]获取 父级分类 名称?
  7. 支持drupal的空间
  8. struts2入门之action获取表单提交数据
  9. 西门子plc vb和c语言区别,西门子plc不同编程语言的区别
  10. 很多人在Google Play商店购买或下载APP时出现问题,例如在你新安装的系统恢复APP或想要安装心愿单中的APP时,Play商店出现不能加载等错误,这实在是太烦人了。 所以,我通过搜索,把可
  11. 5.11 按照文字的笔划进行数据的排序 [原创Excel教程]
  12. Oracle DBA日常工作手册
  13. 如何去做App自动化以及注意事项
  14. 【全志T113-S3_100ask】15-1 内核5.4驱动spi屏幕——ILI9341
  15. 基于MATLAB下巴特沃斯IIR数字滤波器的实现
  16. Bugtags 使用说明
  17. Elasticsearch-高级搜索(拼音|首字母|简繁|二级搜索)
  18. matlab的 figure 如何保存后,被adobe illustrator打开,MATLAB导出矢量图
  19. 一个教育创业者十年观察 钱多是个灾难
  20. Xtrabackup备份

热门文章

  1. 30万奖金!首个有阿里技术培训支持,让AI落定场景应用的赛事!
  2. 精选一套火爆B站的硬核资源,请笑纳!
  3. 清华本硕男,月入5W征婚引群嘲“普通却自信”,本人终于回应了!
  4. 谈一谈我对AI项目落地的看法
  5. 16岁日本神童打造日版「健康码」,追踪用户行动数据抗击疫情
  6. 人工智能顶级会议ICLR取消线下会议:远程出席、视频演讲
  7. 穷清华,富北大,不要命的中科大,是什么意思?
  8. 带你少走弯路:五篇文章学完吴恩达机器学习
  9. Linux内核网络栈1.2.13-有关tcp/ip协议的基础入门
  10. python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))