1.获取CheckedListBox选中项的文本的字符串,并用分隔符连接。系统没有提供相应的属性,方法。

这里我们利用3.0的特性给其来个扩展方法,如下:

        public static string GetCheckedItemsText(this CheckedListBox box)
        {
            string result = box.CheckedItems.Cast<object>().Aggregate(string.Empty, (current, checkedItem) => current + (box.GetItemText(checkedItem) + "/"));
            if (result.Length > 0) result = result.TrimEnd(new char[] {'/'});
            return result;
        }

分隔符这个可以放如参数中,更灵活的变化分隔符。

2.在得知CheckedListBox绑定list对象的某个属性的集合之后来选中list中的项目。如问题1中,返回的字符串,在得到字符串后如何初始化选中状态。

代码

       public static void SetCheckedItmsByNames(this CheckedListBox box, string[] names)
        {
            for (int i = 0; i < box.Items.Count;i++ )
            {
                foreach (string name in names)
                {
                    if (box.GetItemText(box.Items[i]) == name)
                    {
                        box.SetItemChecked(i, true);
                    }
                }
            }
        }

public static void SetCheckedItmsByNames(this CheckedListBox box, string names)
        {
            if(string.IsNullOrEmpty(names)) return;
            string[] name = names.Split(new char[] {'/'});
            SetCheckedItmsByNames(box,name);
        }

3. 当得到了选择项目的字符串获取id串,反之亦ok的方法:
//已知names,取ids
ids = ComFunction.GetNamesOrIdsFromIEnumerable(ChcckedListBox.DataSource as IEnumerable<b_station>,
                                    (w, s) => w.name.ToString() == s ? w.id.ToString() : string.Empty,
                    names);

//已知ids,取names
ids = ComFunction.GetNamesOrIdsFromIEnumerable(ChcckedListBox.DataSource as IEnumerable<b_station>,
                                    (w, s) => w.id.ToString() == s ? w.name.ToString() : string.Empty,
                    names);

实现方法如下:

        public  static string GetNamesOrIdsFromIEnumerable<T>(IEnumerable<T> list,Func<T,string,string> func,string ids)
        {
            string result = string.Empty;
            if (string.IsNullOrEmpty(ids)||list==null)
                return result;
            string[] id = ids.Split(new[]{'/'});
            foreach (string s in id)
            {
                string temp;
                foreach (T model in list)
                {
                    temp  = func(model, s);
                    if (string.IsNullOrEmpty(temp)) continue;
                    result += string.Format("{0}/", temp);
                    break;
                }
            }
            if (result.Length > 0)
                result = result.TrimEnd(new[] {'/'});
            return  result;
        }

通过遍历ids对应的元素和list集合中的元素利用func方法进行比较确认是否符合要求,取得结果。当时主要是很多类型的对象集合需要绑定到CheckedListBox进行操作,而设计的时候又有很多ids,或者names,或者有其一。乱啊。

这次开发主要负责代码实现,没有参与需求和设计,写代码的心思就多了,所以对其他的控件也有提炼了比较多的通用方法和封装(如combobox的搜索效果,支持模糊匹配,like ‘%word%’)等

转自:

http://www.cnblogs.com/buaaboyi/archive/2010/12/21/1913245.html

转载于:https://www.cnblogs.com/johnwonder/archive/2010/12/22/1913373.html

linq 解决winForm中控件CheckedListBox操作的问题。(转载)相关推荐

  1. WinCE5.0移动平台开发笔记(c#中使用多线程访问winform中控件的若干问题(zt))

    本文转载于:http://www.cnblogs.com/zhaotiantang/archive/2009/03/17/1414135.html 我们在做winform应用的时候,大部分情况下都会碰 ...

  2. c#中使用多线程访问winform中控件的若干问题

    我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍. 首先来看传统方法: public partial ...

  3. java插件相对布局,C#Winform中控件的布局思想

    windows窗体应用程序的控件都派生自Control类,并继承了许多通用成员,下面介绍Control类的一些基本特征,了解这些能够大致知道控件是如何实现在窗体中布局的. Achor 指示在控件的容器 ...

  4. WinForm控件CheckedListBox

    以下代码中cbList_IssueStatus.cbList_QualityIndicator是CheckedListBox控件 1.绑定数据源 /// <summary>/// 初始化问 ...

  5. Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决

    Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 参考文章: (1)Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 (2)https://www. ...

  6. Repeater 操作HeaderTemplat或FooterTemplat模板中控件

    获取HeaderTemplat模板中控件 LinkBtn = rp.Controls[0].FindControl("LinkBtnMoreDel") as LinkButton; ...

  7. C# Winform控件对透明图片重叠时导致图片不透明的解决方法

    C# Winform控件对透明图片重叠时导致图片不透明的解决方法 参考文章: (1)C# Winform控件对透明图片重叠时导致图片不透明的解决方法 (2)https://www.cnblogs.co ...

  8. VS2010开发MFC时工具箱中控件不见了的解决方法

    VS2010开发MFC时突然发现工具箱中控件不见了,该怎么调出工具箱中的控件呢? 1.调出资源视图,如果有资源视图,则跳过本步骤 点击菜单栏:视图->资源视图,就能调出资源视图了 2.调出工具箱 ...

  9. 基于C#的GIS开发20210426之类库同名类、制作winform控件、建立控件之间的关联、自己制作控件、自己控件引入项目、显示磁盘文件夹、磁盘文件与picturebox建立关系、图像拉伸

    C#知识点与控件的制作 一.C#中多个类库中有同名类,区分问题 二.制作最简单的winform控件 1.拖动加载 事件代理 筛选器 2.显示属性.事件,及其修改 常见控件属性介绍 窗体常用的方法 常见 ...

最新文章

  1. 再谈 iptables 防火墙的 指令配置
  2. 试图理解80836实模式转变为保护模式
  3. linux配置tomcat内存配置文件,Linux与Windows下tomcat内存设置
  4. 用java正则表达式验证字符串(邮箱与网址)
  5. 实战|全程分析js到getshell
  6. Team Foundation Server 2010 安装、部署与配置(七):创建 Team Project 时的一个 Issue:TF218027 .
  7. 如何不使用让menu控件不回发(postback)
  8. Amber Group散户投资APP资管规模超10亿美元
  9. 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法...
  10. 3.3 Spark概述
  11. hyperledger的个人分享
  12. 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
  13. Python+Django开发微信公众号后台
  14. 将多个excel文件合并为:一个excel文件的多个sheet页【方法技巧】
  15. 内网计算机如何在线查找mac,查询局域网内全部电脑IP和mac地址
  16. 安卓逆向_6 --- Dalvik 字节码、Smali 详解
  17. CSDN博客排名前15名
  18. 华为荣耀android进入,EMUI 9.1公测招募开启 华为荣耀14款机型获支持
  19. 码元速率估计-速率信号法
  20. 对接钉钉消息通知_接入钉钉API发送企业消息

热门文章

  1. 计算机怎么没有桌面文件夹名称大全,你的电脑文件总是找不到?是时候学习文件夹分类整理了...
  2. centos7.4编译mysql5.6,centos7编译安装mysql5.6
  3. linux安装mysql启动失败的原因_爱在linux系统安装mysql启动失败如何处理?
  4. axture动画原型制作_Axure制作原型-基础操作
  5. 如何在虚拟linux环境运行python_Conda(Python)虚拟环境不能从Windows移植到Linux
  6. 允许跨域访问_PHP设置多域名允许跨域访问
  7. 视频光端机音频出现噪音是为何?
  8. html引入latex,如何在html文件中使用MathJax或LaTex?
  9. linux rcu机制,Linux RCU机制详解 (透彻)
  10. Ollydbg使用教程学习总结(四)