ListBox

本文介绍了Windows列表框的各种消息、通知代码及样式,包括如何通过消息控制列表框的行为,以及如何使用不同的样式来定制列表框的表现形式。还提供了一些关于如何优化列表框重绘效率的技巧。

1. Listbox messages  
 LB_ADDSTRING  
 LB_INSERTSTRING  
 LB_DELETESTRING  
 LB_SELITEMRANGEEX  
 LB_RESETCONTENT  
 LB_SETSEL  
 LB_SETCURSEL  
 LB_GETSEL  
 LB_GETCURSEL  
 LB_GETTEXT  
 LB_GETTEXTLEN  
 LB_GETCOUNT  
 LB_SELECTSTRING  
 LB_DIR  
 LB_GETTOPINDEX  
 LB_FINDSTRING  
 LB_GETSELCOUNT  
 LB_GETSELITEMS  
 LB_SETTABSTOPS  
 LB_GETHORIZONTALEXTENT  
 LB_SETHORIZONTALEXTENT  
 LB_SETCOLUMNWIDTH  
 LB_ADDFILE  
 LB_SETTOPINDEX  
 LB_GETITEMRECT  
 LB_GETITEMDATA  
 LB_SETITEMDATA  
 LB_SELITEMRANGE  
 LB_SETANCHORINDEX  
 LB_GETANCHORINDEX  
 LB_SETCARETINDEX  
 LB_GETCARETINDEX  
 LB_SETITEMHEIGHT  
 LB_GETITEMHEIGHT  
 LB_FINDSTRINGEXACT  
 LB_SETLOCALE  
 LB_GETLOCALE  
 LB_SETCOUNT  
 LB_INITSTORAGE  
 LB_ITEMFROMPOINT  
 LB_MSGMAX  
 LB_MSGMAX 


2. Listbox Notification Codes  
 LBN_ERRSPACE       // 列表框存储溢出
 LBN_SELCHANGE      // 改变选择
 LBN_DBLCLK       // 双击条目
 LBN_SELCANCEL      // 取消选择
 LBN_SETFOCUS       // 列表框接收到输入焦点
 LBN_KILLFOCUS     // 列表框接失去输入焦点


 父窗口通过WM_COMMAND消息接收:

 wNotifyCode = HIWORD(wParam); // notification code
 wID = LOWORD(wParam);         // item, control, or accelerator identifier
 hwndCtl = (HWND) lParam;      // handle of control


3. 列表框风格    
 LBS_STANDARD    创建一个具有边界和垂直滚动条、当选择发生变化或条目被双击时能够通知父窗口的标准列表框。所有条目按字母排序。
 LBS_SORT    按字母排序。
 LBS_NOSEL    条目可视但不可选。
 LBS_NOTIFY    当用户选择或双击一个串时,发出消息通知父窗口。
 LBS_DISABLENOSCROLL   在条目不多时依然显示并不起作用的滚动条。
 LBS_MULTIPLESEL   允许条目多选。
 LBS_EXTENDEDSEL   可用SHIFT和鼠标或指定键组合来选择多个条目。
 LBS_MULTICOLUMN   允许多列显示。
 LBS_OWNERDRAWVARIABLE   创建一个拥有者画列表框,条目高度可以不同。
 LBS_OWNERDRAWFIXED   创建一个具有相同条目高度的拥有者画列表框。
 LBS_USETABSTOPS   允许使用TAB制表符。
 LBS_NOREDRAW    当条目被增删后不自动更新列表显示。
 LBS_HASSTRINGS    记忆了添加到列表中的字串。
 LBS_WANTKEYBOARDINPUT   当有键按下时向父窗口发送WM_VKEYTOITEM或WM_CHARTOITEM消息。
 LBS_NOINTEGRALHEIGHT   按程序设定尺寸创建列表框。


 在MFC应用程序中,列表框的通知消息通过ON_LBN消息映射宏而映射到类成员函数。
下表给出了列表框的几个通知消息以及相应的ON_LBN宏。其中,LBN_DBLCLK,LBN_SELCHANGE
和LBN_SELCANCEL通知消息只有在列表框使用了LBS_NOTIFY或LBS_STANDARD风格时才会被发出,
其他通知消息则无此限制。

 


4. 重绘

 缺省的,列表框在每添加或删除一个条目后都会自动重绘,如果在列表框中已经有了几百条甚至上千条条目,
将会因为重绘而引起比较严重的闪烁。可以通过使用LBS_NOREDRAW风格来禁止列表框的自动重绘。在需要更新显示时
强制重绘列表框窗口即可。如果在创建时未使用LBS_NOREDRAW风格,可以在增删条目前向列表框发送WM_SETREDRAW消息,
指定其不重绘,增添完毕后再次发送WM_SETREDRAW消息重新启用自动重绘风格。


 示例过程如下: CListBox m_ctrListBox;
 m_ctrListBox.SendMessage(WM_SETREDRAW, FALSE, 0); // 禁止自动重绘
 // 进行条目增删操作……
 m_ctrListBox.SendMessage(WM_SETREDRAW, TRUE, 0); // 允许自动重绘

<think>首先,用户的问题是基于系统指令和之前的引用。系统指令要求:所有行内数学表达式用$...$,独立公式用$$...$$,正确LaTeX语法,中文回答,生成相关问题,引用段落末尾添加引用标识。 用户引用提供了三条参考: - 引用[1]:关于ListBox控件用法的资源,包括使用说明文档、示例代码、扩展功能等。 - 引用[2]:ListBox控件的定义与作用,以及RadioButton控件的定义(但用户提到的是Listbox)。 - 引用[3]:WPF数据编辑器中的ListBox集成指南,包括ItemTemplate的使用和动态添加/删除项的示例。 用户明确说:“我想获取关于Listbox的相关信息,如使用方法、特点、示例代码等”,并问“请问Listbox的使用指南、特点及示例代码”。 所以,我需要回答有关ListBox的使用方法、特点、示例代码等。 结构化回答: 1. **清晰结构**:帮助用户逐步解决问题。既然用户提到了使用方法、特点、示例代码,我应该分部分回答。 2. **引用**:在回答中引用段落末尾添加引用标识,如[^1]。从引用中提取相关信息。 - 从引用[1]:基本使用、高级技巧、示例代码。 - 从引用[2]:ListBox的定义和作用。 - 从引用[3]:WPF中的示例代码(用户指定了示例代码)。 3. **生成相关问题**:系统指令要求生成相关问题。在回答结束时,添加§§相关问题§§部分。 4. **语言**:用中文回答。 5. **数学表达式**:用户的问题似乎不涉及数学表达式,但如果有,我需要遵守格式。这里可能没有数学内容,所以小心。 组织回答: - **引言**:简要介绍ListBox。 - **特点**:从引用中提炼特点。 - **使用方法**:基于引用提供使用指南和方法。 - **示例代码**:提供代码片段,参考引用[3],因为它有具体的XAML代码。 - **总结**:简要结束。 然后,添加相关问题。 从引用中提取关键点: - 引用[2]:ListBox是一个列表界面元素,允许用户通过滚动条查看或选择选项。应用于语言选择器或搜索结果列表[^2]。 - 引用[1]:包含基本使用、高级技巧、示例代码等[^1]。 - 引用[3]:在WPF中,使用ItemTemplate定义显示方式,提供可编辑模板的示例[^3]。 用户没指定技术栈(如WPF、WinForms等),但引用[3]是WPF-specific。引用[1]和[2]可能更通用。我应该保持通用,除非指定。 在回答中,提到可能的技术,但焦点在通用概念。 回答结构: 1. **ListBox的特点**:描述其核心特性和优点。 2. **使用指南**:步骤如何开始使用ListBox。 3. **示例代码**:提供一个或多个示例代码片段。既然引用[3]有XAML,我可以使用那个,并解释它是WPF的。如果需要通用,要小心。 用户说“Listbox”,可能指通用控件。引用中提到.NET或WPF上下文。但在回答中,我可以覆盖一般概念,给出基于引用的示例。 确保回答真实可靠:基于提供的引用,不添加外部知识,除非必要。 生成相关问题: - 类似于示例中的快速排序问题。 - 例如:ListBox的最佳实践?如何自定义ListBoxListBox与其他控件的比较? 最终回答格式: - 先用中文介绍。 - 分部分。 - 代码块用```包裹。 - 结束时添加相关问题。 </think>### ListBox的使用指南、特点及示例代码 ListBox是一种常见的用户界面控件,用于在有限的屏幕空间内展示和选择多个选项。它广泛应用于桌面应用程序、Web应用等场景,如设置菜单、数据列表展示等。以下是基于引用资料的详细回答,内容覆盖了ListBox的特点、使用方法和示例代码,确保结构清晰,便于您逐步理解和实践。 #### 1. ListBox的特点 ListBox的核心特点包括: - **滚动浏览**:通过内置滚动条,用户可以在垂直或水平方向上浏览大量选项,适用于空间有限的界面[^2]。 - **多选支持**:允许用户选择单个或多个选项(通过属性设置),方便数据集合的交互操作[^1]。 - **灵活的数据绑定**:支持与数据源绑定,动态显示列表内容,简化开发过程[^3]。 - **自定义性强**:开发者可以自定义项的外观、事件处理等,提升用户体验[^1]。 ListBox在需要快速选择或浏览的场景中优势明显,例如语言选择器、搜索结果列表等。它比其他控件(如RadioButton)更适合动态数据展示,因为它能高效处理大量条目[^2]。 #### 2. ListBox的使用指南 使用ListBox的基本步骤基于引用资源,适用于多种开发环境(如WPF、WinForms): 1. **准备资源**:下载相关资源文件(如使用说明文档和示例代码),确保具备基本编程知识[^1]。 2. **基础设置**: - 添加ListBox控件到界面(如通过XAML或设计器)。 - 绑定数据源:使用`ItemsSource`属性连接数据集合(如数组或数据库查询结果)。 - 设置选择模式:根据需要将`SelectionMode`属性设为`Single`(单选)或`Multiple`(多选)[^1]。 3. **高级功能应用**: - **自定义样式**:通过`ItemTemplate`属性定义每个项的显示模板,例如使用StackPanel布局文本和输入框[^3]。 - **事件处理**:绑定事件如`SelectionChanged`,实现用户选择后的逻辑响应(如更新UI或触发操作)。 - **动态操作**:支持添加或删除项,通过代码动态更新数据源,确保列表实时刷新[^3]。 4. **最佳实践**: - 遵循良好编程习惯:避免在ListBox中绑定过多数据导致性能问题,优先使用虚拟化(VirtualizingStackPanel)优化大型列表[^1]。 - 测试常见问题:如滚动条失效或绑定错误,参考资源文件中的常见问题解答(FAQ)进行调试[^1]。 按照这些步骤,您可以快速上手并扩展ListBox功能。如果需要更详细的示例,资源文件中的使用说明文档提供了分步指南[^1]。 #### 3. ListBox的示例代码 以下示例代码基于引用[3],展示在WPF(Windows Presentation Foundation)中使用ListBox的可编辑模板。代码演示了数据绑定、自定义项布局和动态更新功能(假设数据源为Person对象集合)。 ```xml <!-- XAML代码:定义ListBox控件 --> <ListBox ItemsSource="{Binding People}" HorizontalContentAlignment="Stretch"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="5"> <TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="150" Margin="0,0,10,0"/> <TextBox Text="{Binding Age, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="50"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> ``` **代码说明**: - **数据绑定**:`ItemsSource="{Binding People}"` 绑定到Person对象的集合(如C#中的ObservableCollection),实现数据动态显示。 - **自定义模板**:使用`ItemTemplate`和`DataTemplate`定义每个项的布局,这里采用StackPanel水平排列两个TextBox(用于显示和编辑Name和Age属性)。 - **双向绑定**:`Mode=TwoWay`和`UpdateSourceTrigger=PropertyChanged`确保用户输入即时更新数据源。 - **动态操作**:添加或删除项时,只需修改People集合(如使用`Add()`或`Remove()`方法),ListBox自动刷新界面[^3]。 此示例展示了ListBox作为可编辑数据编辑器的应用。如果您使用其他技术栈(如WinForms),资源文件中的示例代码提供了类似实现(如C#代码设置Items属性)[^1]。 ### 总结 ListBox控件通过其滚动浏览、多选支持和高度可自定义的特性,成为数据展示和交互的核心工具。核心使用方法包括数据绑定、模板自定义和事件处理,而示例代码则帮助您快速实现常见场景。更多细节可参考资源文件中的使用文档和扩展功能部分[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值