平常我们经常会用到这样的控件:选中一个ListBox 中的项移动到另外一个 ListBox 中,反过来也行。像下面这样:

我们需要将上面两个涂黑的地方 (Label),以及两个 ListBox,四个操作按钮做成为一个控件,这样方便重复利用,也会少写很多代码

在项目上点击“添加用户控件”,命名为: ListBoxLR

然后在控件上添加上面共8个控件,然后需要为该控件添加至少4个事件:

        [Category("Action")]
        public event EventHandler AllToLeftClick = null;// 全选到左边
        [Category("Action")]
        public event EventHandler AllToRightClick = null;// 全选到右边
        [Category("Action")]
        public event EventHandler OneToLeftClick = null;// 选一个到左边
        [Category("Action")]
        public event EventHandler OneToRightClick = null;// 选一个到右边

两个涂黑的地方为左右标题,也提供自定义:

        [Category("Appearance")]
        public string TextLeft {
            get {
                return lblLeft.Text;
            }
            set {
                lblLeft.Text = value;
            }
        }

[Category("Appearance")]
        public string TextRight {
            get {
                return lblRight.Text;
            }
            set {
                lblRight.Text = value;
            }
        }

接着是两个 ListBox:


        [Browsable(false)]
        public ListBox BoxLeft {
            get {
                return lstLeft;
            }
        }

[Browsable(false)]
        public ListBox BoxRight {
            get {
                return lstRight;
            }
        }

以下是完整源码:

完整源码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace Lyout.Controls {
    /// <summary>
    /// 功能:左右交换列表控件
    /// 日期:2010-09-20     修改日期:
    /// 作者:夏荣全         修改人:
    /// 联系:lyout@163.com QQ:249775085
    /// </summary>
    public partial class ListBoxLR : UserControl {
        [Category("Action")]
        public event EventHandler AllToLeftClick = null;
        [Category("Action")]
        public event EventHandler AllToRightClick = null;
        [Category("Action")]
        public event EventHandler OneToLeftClick = null;
        [Category("Action")]
        public event EventHandler OneToRightClick = null;

public ListBoxLR() {
            InitializeComponent();
        }

[Category("Appearance")]
        public string TextLeft {
            get {
                return lblLeft.Text;
            }
            set {
                lblLeft.Text = value;
            }
        }

[Category("Appearance")]
        public string TextRight {
            get {
                return lblRight.Text;
            }
            set {
                lblRight.Text = value;
            }
        }

[Browsable(false)]
        public ListBox BoxLeft {
            get {
                return lstLeft;
            }
        }

[Browsable(false)]
        public ListBox BoxRight {
            get {
                return lstRight;
            }
        }

private void btnAllToRight_Click(object sender, EventArgs e) {
            if ( AllToRightClick != null ) {
                AllToRightClick(sender, e);
            }
        }

private void btnOneToRight_Click(object sender, EventArgs e) {
            if ( OneToRightClick != null ) {
                OneToRightClick(sender, e);
            }
        }

private void btnOneToLeft_Click(object sender, EventArgs e) {
            if ( OneToLeftClick != null ) {
                OneToLeftClick(sender, e);
            }
        }

private void btnAllToLeft_Click(object sender, EventArgs e) {
            if ( AllToLeftClick != null ) {
                AllToLeftClick(sender, e);
            }
        }
        // 控件改变大小时里面的控件也要相应改变
        private void ListBoxLR_Resize(object sender, EventArgs e) {
            if ( this.Width<443 ) {
                this.Width = 443;
            }
            if ( this.Height<251 ) {
                this.Height = 251;
            }

int width = this.Width - 4 * 15 - btnAllToRight.Width;
            int height = this.Height - 4 * 15;

lstLeft.Width = width / 2;
            lstLeft.Height = height;

lstRight.Width = width / 2;
            lstRight.Height = height;

lstRight.Left = 15 * 3 + width / 2 + btnAllToRight.Width;
            lblRight.Left = lstRight.Left;

btnAllToRight.Left = 15 * 2 + lstLeft.Width;
            btnOneToRight.Left = btnAllToRight.Left;
            btnAllToLeft.Left = btnAllToRight.Left;
            btnOneToLeft.Left = btnAllToRight.Left;
        }

private void lstLeft_DoubleClick(object sender, EventArgs e) {
            if ( OneToRightClick != null ) {
                OneToRightClick(sender, e);
            }
        }

private void lstRight_DoubleClick(object sender, EventArgs e) {
            if ( AllToLeftClick != null ) {
                OneToLeftClick(sender, e);
            }
        }
    }
}

点此下载

转载于:https://www.cnblogs.com/lyout/archive/2010/09/20/1831633.html

入门级: WinForm 下的 ComboBox,ListBox 的使用 (三) 选择控件相关推荐

  1. Winform中在使用Dock属性设计页面布局控件的顺序导致页面效果不同的问题

    场景 在Winform中进行页面设计时,常使用控件的Dock属性来进行布局调整.但是由于设置属性的顺序问题,导致达不到想要的效果. 比如以下两个控件 下面的控件设置的Dock属性是Bottom,即在页 ...

  2. Delphi 7下使用VT实现树型列表结合控件

    Delphi 7下使用VT实现树型列表结合控件 转载于:https://www.cnblogs.com/LittleTiger/p/5007580.html

  3. ListBox之随手放个控件

    众所周知的ListBox可容纳所有的控件已不成问题. 转载于:https://www.cnblogs.com/molin/archive/2009/12/30/silverlight_listbox. ...

  4. html ui 下拉列表,Atitit.ui控件-下拉菜单选择控件的实现select html_html/css_WEB-ITnose...

    Atitit.ui控件---下拉菜单选择控件的实现select html 1. 调用& model的实现 1 2. -----select.jsp------ 1 1. 调用& mod ...

  5. js 跨域的问题 (同一个主域名不同的二级域名下的跨域问题) 解决 WdatePicker.js my97日期选择控件

    js 跨域的问题 (同一个主域名不同的二级域名下的跨域问题) 解决 WdatePicker.js my97日期选择控件 参考文章: (1)js 跨域的问题 (同一个主域名不同的二级域名下的跨域问题) ...

  6. C# WinForm 文件夹选择控件 folderBrowserDialog 的应用实例

    上期文章<使用 C# 修改文件创建时间>中有文件夹选择控件,但并没有提到如何使用,所以这次主要是针对这个控件讲下如何使用的一些细节.就两个动作,请看下图: 1.从工具箱中"双击& ...

  7. c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。...

    首先来看传统方法: public partial class Form1 : Form{public Form1() { InitializeComponent(); } private void F ...

  8. dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

    DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...

  9. Winform中怎样根据Name获取同窗体的控件

    场景 在同一个Winform窗体中,点击一个Button按钮时, 获取同窗体的其他控件的属性. 首先需要对要获取的控件赋予Name属性,然后就可以通过Name进行获取. 实现 在Button的点击事件 ...

最新文章

  1. 王咏刚分享DeeCamp三年成功经验:学生超自主,导师很顶尖,批量培养AI人才不是梦...
  2. sap中二级品报工问题解决方案
  3. 树莓派AI视觉云台——7、树莓派系统备份
  4. 高效开发者是如何个性化VS Code插件与配置的?
  5. sklearn.fit_两个小时后仍在运行吗? 如何控制您的sklearn.fit。
  6. matlab snr eb n0,snr ber Eb/N0之间的区别与联系
  7. vue.js踩坑之单向数据流
  8. gensim读取已训练模型LDA模型的模型与dictionary
  9. 爬虫初窥day1:urllib
  10. 大数据平台搭建_【他山之石】自研搭建Hadoop数据科学开发环境,促进大数据平台建设降本增效...
  11. 微信小程序 图片显示不完全
  12. java线程倒计时_Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger...
  13. 通过路由器端口映射,对局域网内服务器进行ssh登录
  14. 数智融合加速驱动企业商业创新
  15. HKEY_CLASSES_ROOT/Applications
  16. 求n的阶乘并显示过程
  17. 容联云通讯php短信接口,短信查询接口_开发文档_容联云通讯
  18. HDLBits Lemmings1-4
  19. MYSQL 2059问题的解决
  20. FFmpeg使用sws_scale转换像素格式后,视频变为绿色条纹背景及部分图像丢失

热门文章

  1. word可以画神经网络图吗,怎么画神经网络结构图
  2. 回答审稿人问题之前,如何变着花样的感谢审稿人
  3. 苹果都用自己系统,旧手机我也改成服务器!
  4. QT中QSS的语法设置【颜色渐变处理】
  5. 小米8系统推送服务器,小米8终于要升级MIUI10稳定版了,你收到推送了吗?
  6. java 反射的弊端_Java反射机制的缺点
  7. 同时购买多件设置了不同运费模板的商品,该如何合理计算运费
  8. 亲测有效:Nvidia XAVIER NX刷机、pytorch、torchvision安装,
  9. 关于html页面优化,关于html页面优化的实例详解
  10. 【机器学习笔记】Regularization : Ridge Regression(岭回归)