c#使用listbox的详细方法和常见问题解决
作者:痴者工良 发布时间:2023-08-27 11:28:56
关于ListBox
ListBox是WinForm中的列表控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过多时,ListBox会自动添加滚动条,使用户可以滚动查阅所有选项。ListBox可以预先设定列表内容,也可以绑定其他控件或数据库,自动更新条目,把数据逐一显示出来。
ListBox常用属性
*列表索引值,是指列表中的条目的序号,从0开始,如0,1,2,3... ...,当对列表进行增删插入等操作时,条目的排序发生变化,索引亦会变化。
*选择项索引,是指选中的项目亦从0开始的序号,当对选中项进行增删等操作时,数目发生变化,索引亦会变化。就好像我叫痴者工良,按照姓名拼音排序,在班级的学号是66,而在班里10个姓痴的同学中,我是3号。
两者区别如下(有颜色背景为选中项):
常用属性 | 说明 |
---|---|
Items | 指列表中所有的条目集合,是一个数组集合。可以通过该属性,对列表进行增添、移除或获取列表内容 |
MultiColumn | 用来设置或获取一个值(bool值),表示是否允许多列显示,true表示多列,false表示单列,默认为false。 |
CoumnWidth | 用来获取列表当前列的宽度或设置列表当前列的宽度 |
SelectionMode | 设置列表条目的选择方法。 SelectionMode.None 表示不允许选中 SelectionMode.One 表示只允许用户选择一项 SelectionMode.MultiExtended 表示允许选择多项,但选中的条目必定相连(相邻) SelectionMode.MultiSimple 表示允许选择多项,可以任意选中多个条目。如下图 |
SelectedIndex | *获取选中项的索引 未选中任何项时,返回值为 1 单选时,属性值即为选中项的索引 多选时,表示第一项选定项的索引,亦可使用SelectedIndex[i]获取其它选中项索引,亦可让某项变成选中状态。i 为选中项从0开始的序号。 |
SelectedIndeces | 用来获取选中项从0开始的索引的集合,一般只用于多项。与SelectedIndex相似,但SelectedIndeces只有获取索引的能力。 |
SelectedItem | 获取列表当前选中项。注意,获取到的是列表选中项的文本内容,而SelectedIndex和SelectedIndeces获取的只是选中项索引(int)。 |
SelectedItems | 获取选中项的集合,使用SelectedItems[i]来获取选中项的文本内容,i为选中项集合索引。 SelectedItems和SelectedIndex相似,但一个是获取文本字段,一个是获取索引。 |
Sorted | 用来设置或获取列表是否按字母排序(bool)。 |
Text | 获取或搜索列表控件当前选定项的文本。 |
ItemsCount | 用来获取当前列表条目的 数目。 |
ListBox增加、插入或删除内容
这是通过使用Items属性进行操作的,在visual studio中新建窗口,拖入一个列表控件,控件name为lixtBox1
listBox1.Items.Add("要增加的条目文本");
//将在列表后面添加
listBox1.Items.Insert(i, "要增加的条目文本");
//将在索引为i的条目后面插入一条新条目
listBox1.Items.Remove("在此放入你要移除条目的文本内容");
//删除是用的是文本内容,而不是索引
listBox1.Items.Clear();
//清空列表所有条目
listBox1.ClearSelected();
//取消所有选中项,即变为未选中状态
ListBox删除多项内容
很多朋友在这里摔跤,vs老是提示数组超出界限。因为ListBox的删除要通过指定某项的文本,并且只能一项项的删除,而删除一项后索引又会发生变化,所以新手可能会很惘然。下面提供两种删除方式的代码供新手参考。
for (int i=listBox1.SelectedItems.Count-1;i>=0 ;i--)
{ //要从后面往前删除
listBox1.Items.Remove(listBox1.SelectedItems[i]);
//SelectedItems直接获取选中项的文本
}
//如果你是新手,看不懂上面的代码,别急,跳过这里,先看下面内容内容,后面会详细介绍
for (int i = listBox1.SelectedItems.Count-1; i >=0; i--)
{ //亦是从后删除
listBox1.Items.Remove(listBox1.Items[listBox1.SelectedIndices[i]]);
//先获取索引,再获取文本内容
}
获取集合的数量
int i = 0;
i=listBox1.Items.Count;
//获取列表所有条目的数量
i = listBox1.SelectedIndices.Count;
//获取选中的条目的数量
i = listBox1.SelectedItems.Count;
//获取选中的条目的数量
//listBox1.SelectedIndex不能获取数量!请翻阅属性表,有关键词“集合”。能够获取集合的属性,才能获取数量
获取所有选中条目的内容
再新建一个TextBox控件,name为textBox1,代码如下
textBox1.Clear();
textBox1.Text = "选中项的内容为\r\n";
for(int i=0;i<listBox1.SelectedItems.Count ;i++ )
{
textBox1.Text += +listBox1.SelectedItems[i].ToString()+"\r\n";
//逐条读取选中项的内容
}
ListBox单选或多选
点击ListBox控件,在属性一栏找到SelectionMode
属性,亦可以代码形式设定,属性说明如下
SelectionMode.None 表示不允许选中
SelectionMode.One 表示只允许用户选择一项
SelectionMode.MultiExtended 表示允许选择多项,但选中的条目必定相连(相邻),鼠标当选中一项后,按键盘↑↓可以选定一个范围的选项,但选项不能间隔选中。如下图:
SelectionMode.MultiSimple 表示允许选择多项,可以任意选中多个条目,点一下可以选中一条项目,重复点一下即取消。如下图
来源:https://www.cnblogs.com/whuanle/p/8622830.html


猜你喜欢
- package com.cjonline.foundation.authority.pojo;import java.util
- ftp/sftp概念及搭建ftp是一种文件传输协议,让客户端和服务端能够互相传递文件,图片等数据;方便快捷;sftp是ssh file tr
- 在方法声明中只允许一个paras关键字,并且该关键字只能为最后一个。using System; /*********************
- 本文会先介绍通用 Mapper 的简单原理,然后使用最简单的代码来实现这个过程。基本原理通用 Mapper 提供了一些通用的方法,这些通用方
- 一直到大四才开始写自己的第一篇博客,说来实在有点羞愧。今天写了关于排序的算法题,有插入排序,冒泡排序,选择排序,以下贴上用JAVA实现的代码
- System.Threading.Timer 是由线程池调用的。所有的Timer对象只使用了一个线程来管理。这个线程知道下一个Timer对象
- spring @Autowired注解无法注入问题简述在使用spring框架的过程中,常会遇到这种两情况:1、在扫描的包以外使用需要使用ma
- 引导语本小节和大家一起来看看 CountDownLatch 和 Atomic 打头的原子操作类,CountDownLatch 的源码非常少,
- 上篇博文:Java-多线程的使用equals与==1. ==的使用1.1 概述⭕ 用于基本类型比较值时:只要两个变量的值相等,即为true。
- 内存分配方式简介在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:在执行函数时,函数内局部变量的存
- 本文实例讲述了Java使用Thread和Runnable的线程实现方法。分享给大家供大家参考,具体如下:一 使用Thread实现多线程模拟铁
- 本文实例讲述了Java基于IO流读取文件的方法。分享给大家供大家参考,具体如下:public static void readFile(){
- 简介这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问。后来还是决定写了主要是想把自己分析问题思路分享
- 一、前言一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文
- 1.什么是Ribbon目前主流的负载均衡方案分为以下两种:(1)集中式负载均衡:在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的
- 1. * 在 Spring Boot 可以可以在以下情况执行操作:在将请求发送到控制器之前在将响应发送给客户端之前2. * 使用下面实现
- 本文实例讲述了WPF中不规则窗体与WindowsFormsHost控件兼容问题的解决方法。分享给大家供大家参考。具体方法如下:这里首先说明一
- 最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,线程,定时
- 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付。现在,我们讲讲这个公众号支付。公众号支付的应用环境常见的用户通过公
- mybatis oracle 自增序列的代码如下所示:<insert id=" insert " useGener