combobox开发设计文档
WPF的ComboBox数据模板自定义

WPF的ComboBox数据模板⾃定义WPF的ComboBox 有些时候不能满⾜⽤户需求,需要对数据内容和样式进⾏⾃定义,下⾯就简要介绍⼀下⽤数据模板(DataTemplate)的⽅式对ComboBox 内容进⾏定制:原型设计如下:步骤:1、新建⼀个WPF应⽤程序WpfAppDemo(VS2012),并新建⼀个images⽂件夹(上传图⽚素材);2、在主界⾯MainWindow.xaml⽂件中添加⼀个Label、ComboBox 和Button控件,如下图:代码如下:1 <Window x:Class="WpfAppDemo.MainWindow"2 xmlns="/winfx/2006/xaml/presentation"3 xmlns:x="/winfx/2006/xaml"4 Title="MainWindow" Height="350" Width="525">5 <Grid>6 <ComboBox x:Name="myColorComBox" HorizontalAlignment="Left" Margin="110,79,0,0" VerticalAlignment="Top" Width="309" Height="48" >7 <!--ItemTemplate-->8 <ComboBox.ItemTemplate>9 <!--DataTemplate开始-->10 <DataTemplate>11 <Grid>12 <Grid.ColumnDefinitions>13 <ColumnDefinition Width="36"/>14 <ColumnDefinition Width="100*"/>15 </Grid.ColumnDefinitions>16 <Grid.RowDefinitions>17 <RowDefinition Height="50*"/>18 <RowDefinition Height="50*"/>19 </Grid.RowDefinitions>20 <!--绑定数据对象Image属性-->21 <Image Source="{Binding Image}" Width="32" Height="32" Margin="3,3,3,3" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" />22 <!--绑定数据对象Name属性-->23 <TextBlock Text="{Binding Name}" FontSize="12" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center"/>24 <!--绑定数据对象Desc属性-->25 <TextBlock Text="{Binding Desc}" FontSize="10" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Center"/>26 </Grid>27 </DataTemplate>28 <!--DataTemplate结束-->29 </ComboBox.ItemTemplate>30 </ComboBox>31 <Label Content="员⼯: " HorizontalAlignment="Left" Margin="66,92,0,0" VerticalAlignment="Top"/>32 <Button Content="显⽰" HorizontalAlignment="Left" Margin="110,166,0,0" VerticalAlignment="Top" Width="75" Height="22" Click="Button_Click"/>3334 </Grid>3536 </Window>3、在主界⾯MainWindow.xaml.cs⽂件中进⾏逻辑处理,代码如下:1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 using System.Windows;7 using System.Windows.Controls;8 using System.Windows.Data;9 using System.Windows.Documents;10 using System.Windows.Input;11 using System.Windows.Media;12 using System.Windows.Media.Imaging;13 using System.Windows.Navigation;14 using System.Windows.Shapes;151617 namespace WpfAppDemo18 {19 /// <summary>20 /// MainWindow.xaml 的交互逻辑21 /// </summary>22 public partial class MainWindow : Window23 {24 public MainWindow()25 {26 InitializeComponent();27 //初始化数据,并绑定28 LodData();29 }303132 private void LodData()33 {34 IList<empoyee> customList = new List<empoyee>();35 //项⽬⽂件中新建⼀个images⽂件夹,并上传了001.png,002.png,003.png36 customList.Add(new empoyee() { ID ="001", Name = "Jack" ,Image="images/001.png",Desc="this is good gay!"});37 customList.Add(new empoyee() { ID = "002", Name = "Smith", Image = "images/002.png", Desc = "this is great gay!" });38 customList.Add(new empoyee() { ID = "003", Name = "Json", Image = "images/003.png", Desc = "this is the bset gay!" });394041 this.myColorComBox.ItemsSource = customList;//数据源绑定42 this.myColorComBox.SelectedValue = customList[1];//默认选择项4344 }454647 private void Button_Click(object sender, RoutedEventArgs e)48 {49 //显⽰选择的员⼯ID信息50 MessageBox.Show((this.myColorComBox.SelectedItem as empoyee).ID);51 }525354555657 }58 //定义员⼯类59 public class empoyee60 {61 public string ID { get; set; }62 public string Name { get; set; }63 public string Image { get; set; }64 public string Desc { get; set; }6566 }67 }4、编译运⾏,如果运⽓不错的话,应该能看到如下的界⾯:。
说明书-推箱子-课程设计

尚需解决的问题
游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模 块,导入玩家自己喜欢的音乐。在此次课程设计中,我遇到了一些问题,如:对于面 向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于 Java 语言, 只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在 短时间内用 Java 语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一 个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难 以动手,这表明所学的知识不能灵活运用到实际中。
对于推箱子游戏,更是有了进一步的了解,其中用到了 9 张图片,用户可以通过 改变图片来改变游戏的显示界面,当然,这个是不被允许的,因为每个程序的代码都 有版权,但对于设计者而言,却可以更加清楚的了解代码的内部构造,达到熟能生巧 的效果。
游戏的帮助和关于设计人性化,在写代码是遇次课程设计,将我本周所 学的 JAVA 知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同 学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不
推箱子游戏 3
图 1 游戏运行界面 .2 任务执行流程图
游戏从第一关开始,按上下左右方向键控制小人移动来推动箱子,可以在游戏中 的任何时候按退出键退出。如果游戏无成功希望,可以按空格键回到当前任务的开始 状态;如果成功完成当前关,则显示通关信息,如果想继续闯,按回车闯下一关,否 则结束游戏。
游戏同时还具有时间和步数的记录,在开始游戏之前首先把图片添加到 pic 目录 下,程序会自动获取该目录下的所有文件。
系统模块图 本程序包括 5 个模块,分别是初始化模块、画图模块、移动箱子模块、移动小 模
WPFCombobox样式

WPFCombobox样式<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}"><Grid x:Name="grid"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition Width="20" /></Grid.ColumnDefinitions><Rectangle Grid.ColumnSpan="2" HorizontalAlignment="Stretch" x:Name="Rectangle" VerticalAlignment="Stretch" Width="Auto" Height="Auto" RadiusX="3" RadiusY="3" Fill="LightBlue" /> <!--Combobox控件外壳--><Rectangle Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" RadiusX="3" RadiusY="3" Fill="Gray" /> <!--除开下拉按钮的其他部分--><Border Margin="2,2,2,2" Grid.Column="1" Background="Red" Width="Auto" CornerRadius="3,3,3,3" x:Name="drop_border" /><Path Grid.Column="1" HorizontalAlignment="Center" Width="Auto" x:Name="Arrow" VerticalAlignment="Center" Fill="{x:Null}" Data="M0.5,0.5 L3,6.5 5.5,0.5" Stroke="Black" Margin="5,0,5,0" Height="7" StrokeThickness="2" Stretch </Grid><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="true"><Setter TargetName="drop_border" Property="Background" Value="White" /></Trigger></ControlTemplate.Triggers></ControlTemplate><ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"><Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /></ControlTemplate><Style TargetType="{x:Type ComboBox}"><Setter Property="SnapsToDevicePixels" Value="true" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type ComboBox}"><Border BorderBrush="Orange" x:Name="border"><Grid x:Name="grid"><ToggleButton Template="{StaticResource ComboBoxToggleButton}" x:Name="ToggleButton" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedP <ContentPresenter HorizontalAlignment="Left" x:Name="ContentSite" VerticalAlignment="Center" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentT <TextBox Visibility="Hidden" Margin="2,2,22,2" x:Name="PART_EditableTextBox" Style="{x:Null}" VerticalAlignment="Center" Focusable="True" IsReadOnly="{TemplateBinding IsReadOnly}" Foreground="Black" Horizonta <Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide"><Grid MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True"><Border x:Name="DropDownBorder" Background="WhiteSmoke" CornerRadius="3,3,3,3" /><ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True" Foreground="{StaticResource {x:Static SystemColors.Activ <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /></ScrollViewer></Grid></Popup></Grid></Border><ControlTemplate.Triggers><Trigger Property="HasItems" Value="false"><Setter Property="MinHeight" Value="95" TargetName="DropDownBorder" /></Trigger><Trigger Property="IsGrouping" Value="true"><Setter Property="ScrollViewer.CanContentScroll" Value="false" /></Trigger><Trigger Property="AllowsTransparency" SourceName="Popup" Value="true"><Setter Property="Margin" Value="0,2,0,0" TargetName="DropDownBorder" /></Trigger><Trigger Property="IsEditable" Value="true"><Setter Property="IsTabStop" Value="false" /><Setter Property="Visibility" Value="Visible" TargetName="PART_EditableTextBox" /><Setter Property="Visibility" Value="Hidden" TargetName="ContentSite" /></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>⼀直没搞懂Combobox具体是怎么设计的,今天抽空研究了⼀下,终于看懂了,主要有3个控件组成,ToggleButton,TextBox 和Popup,ToggleButton:整个控件是由ToggleButton铺满的HorizontalAlignment="Stretch",ToggleButton⾥⾯由⼀个Rectangle铺满,设置Combobox的圆⾓,边框及背景颜⾊,然后宽度20px的Border,path 为下拉按钮样式,点击combobox下拉按钮实际是点击ToggleButtonTextBox :当IsEditable为True,会把Textbox 显⽰出来,Textbox是覆盖在ToggleButton之上的,注意应设置HorizontalAlignment="Stretch",这样才会把Textbox铺满,⽹上很多设置的是Left,很不好选中TextBox,其次还应设置Margin="2,2,22,2",距右边22px,这样才不能遮挡出下拉按钮Popup:⽤于显⽰ComboboxItem<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}"> <Grid x:Name="grid"> <Grid.ColumnDefinitions><ColumnDefinition /> <ColumnDefinition Width="20" /> </Grid.ColumnDefinitions> <Rectangle Grid.ColumnSpan="2"HorizontalAlignment="Stretch" x:Name="Rectangle" VerticalAlignment="Stretch" Width="Auto" Height="Auto" RadiusX="3" RadiusY="3" Fill="LightBlue" /> <!--Combobox控件外壳--> <Rectangle Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" RadiusX="3" RadiusY="3" Fill="Gray" /><!--除开下拉按钮的其他部分--> <Border Margin="2,2,2,2" Grid.Column="1" Background="Red" Width="Auto" CornerRadius="3,3,3,3" x:Name="drop_border" /><Path Grid.Column="1" HorizontalAlignment="Center" Width="Auto" x:Name="Arrow" VerticalAlignment="Center" Fill="{x:Null}" Data="M0.5,0.5 L3,6.5 5.5,0.5"Stroke="Black" Margin="5,0,5,0" Height="7" StrokeThickness="2" Stretch="Fill" /> <!--Border 和 Path为下拉按钮--> </Grid> <ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="drop_border" Property="Background" Value="White" /> </Trigger></ControlTemplate.Triggers> </ControlTemplate><ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}"> <Border x:Name="PART_ContentHost" Focusable="False" Background="{TemplateBinding Background}" /> </ControlTemplate> <Style TargetType="{x:Type ComboBox}"> <Setter Property="SnapsToDevicePixels" Value="true" /><Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBox}"> <Border BorderBrush="Orange"x:Name="border"> <Grid x:Name="grid"> <ToggleButton Template="{StaticResource ComboBoxToggleButton}" x:Name="ToggleButton"Focusable="false" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press" /><ContentPresenter HorizontalAlignment="Left" x:Name="ContentSite" VerticalAlignment="Center" Content="{TemplateBinding SelectionBoxItem}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" IsHitTestVisible="False" /> <TextBoxVisibility="Hidden" Margin="2,2,22,2" x:Name="PART_EditableTextBox" Style="{x:Null}" VerticalAlignment="Center" Focusable="True" IsReadOnly="{TemplateBindingIsReadOnly}" Foreground="Black" HorizontalAlignment="Stretch" Background="Azure" /> <!--⽂本输⼊框,当IsEditable为true 才显⽰--> <Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide"><Grid MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True"><Border x:Name="DropDownBorder" Background="WhiteSmoke" CornerRadius="3,3,3,3" /> <ScrollViewer Margin="4,6,4,6"SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True" Foreground="{StaticResource {x:StaticSystemColors.ActiveCaptionTextBrushKey}}"> <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /></ScrollViewer> </Grid> </Popup> </Grid> </Border> <ControlTemplate.Triggers><Trigger Property="HasItems" Value="false"> <Setter Property="MinHeight" Value="95" TargetName="DropDownBorder" /></Trigger> <Trigger Property="IsGrouping" Value="true"> <Setter Property="ScrollViewer.CanContentScroll" Value="false" /></Trigger> <Trigger Property="AllowsTransparency" SourceName="Popup" Value="true"> <Setter Property="Margin"Value="0,2,0,0" TargetName="DropDownBorder" /> </Trigger> <Trigger Property="IsEditable" Value="true"> <SetterProperty="IsTabStop" Value="false" /> <Setter Property="Visibility" Value="Visible" TargetName="PART_EditableTextBox" /> <Setter Property="Visibility" Value="Hidden" TargetName="ContentSite" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>。
ComboBox控件的用法教程

ComboBox控件的⽤法教程前⾯我们了解了ListBox(列表框)控件的使⽤,在中还有⼀个与ListBox控件⼗分相似的控件——ComboBox 控件,也叫组合框。
组合框控件包括两个部分,⼀部分是上部可以输⼊列表项的⽂本框;另⼀部分是位于⽂本框下⽅的列表框,⽤于显⽰⽤户可以从中选择的项的列表 ComboBox 控件和ListBox 控件在功能上很相似,很多情况下,这两个控件是可以互换使⽤的,但是还是有某种特定的环境下只适合使⽤⼀种控件的情况。
通常,ComboBox控件适合于建议⽤户选择控件所列举的选项、同时⼜可以让⽤户⾃⾏在⽂本框中输⼊列表中不存在的选项的情况;⽽ListBox 控件适合于限制⽤户只能选择列表中的选项的情况。
在⽤户界⾯上,因为ComboBox 控件默认情况下是存在下拉列表框的,所以⽐ListBox 控件占⽤的窗体空间少,更加适合于使⽤在存在⼤量列表项的情况下。
如下图三所⽰的是QQ修改个⼈设置的界⾯,它⼤量地合理使⽤ComboBox 控件,使得⽤户界⾯简洁且能容纳下更多的选项信息。
由此可见,ComboBox 控件的⽐ListBox 控件更加能灵活多⽤。
⼀、ComboBox 控件的常⽤属性: 1、BackColor 属性:获取或设置ComboBox 控件的背景⾊。
2、DropDownStyle 属性:获取或设置指定组合框样式的值,确定⽤户能否在⽂本部分中输⼊新值以及列表部分是否总显⽰。
它包含三个值,默认值为 DropDown,如下表所⽰:成员名称说明DropDown ⽂本部分可编辑。
⽤户必须单击箭头按钮来显⽰列表部分。
DropDownList ⽤户不能直接编辑⽂本部分。
⽤户必须单击箭头按钮来显⽰列表部分。
Simple ⽂本部分可编辑。
列表部分总可见。
3、DropDownWidth 属性:⽤于获取或设置组合框下拉部分的宽度(以像素为单位),有些列表项太长,则需要通过改变该属性来显⽰该类表项的全部⽂字,如果未设置 DropDownWidth 的值,该属性返回组合框的 Width。
ComboBox 控件(Windows 窗体)

ComboBox 控件(Windows 窗体).NET Framework 4.5其他版本Windows 窗体ComboBox控件用于在下拉组合框中显示数据。
默认情况下,ComboBox控件分两个部分显示:顶部是一个允许用户键入列表项的文本框。
第二部分是一个列表框,它显示一个项列表,用户可从中选择一项。
本节内容ComboBox 控件概述(Windows 窗体)解释该控件是什么及其主要功能和属性。
如何:在 ComboBox 控件中创建大小可变的文本演示ComboBox控件中的自定义文本绘制。
参考ComboBox类描述该类并提供指向其所有成员的链接。
ComboBox 控件概述(Windows 窗体).NET Framework 4.5其他版本此主题尚未评级 - 评价此主题Windows 窗体ComboBox控件用于在下拉组合框中显示数据。
默认情况下,ComboBox控件分两个部分显示:顶部是一个允许用户键入列表项的文本框。
第二部分是一个列表框,它显示一个项列表,用户可从中选择一项。
有关组合框的其他样式的更多信息,请参见何时使用 Windows窗体 ComboBox 而非 ListBox。
SelectedIndex属性返回一个整数值,该值与选择的列表项相对应。
通过在代码中更改SelectedIndex值,可以编程方式更改选择项;列表中的相应项将出现在组合框的文本框部分。
如果未选定任何项,则SelectedIndex值为 -1。
如果选择列表中的第一项,则SelectedIndex值为 0。
SelectedItem属性类似于SelectedIndex,但它返回项本身,通常是字符串值。
Count属性反映列表的项数,由于SelectedIndex是从零开始的,所以Count属性的值通常比SelectedIndex的最大可能值大一。
若要在ComboBox控件中添加或删除项,请使用Add、Insert、Clear或Remove方法。
VB教程:组合框(ComboBox)

7、组合框(ComboBox)作⽤:ComboBox控件其实是融合了TextBox控件和ListBox控件两者的功能,它既可以像TextBox控件那样允许⽤户键⼈新内容,⼜可以橡ListBox控件那样允许⽤户对列表中的项⽬进⾏选择。
ComboBox控件的属性、⽅法、事件与ListBox控件⼤致相同,在此我们只把不同的部分提出来,以作⽐较。
(1)Style属件ComboBox控件的Style属件与ListBox控件的Style属性是不同的,请看下表的描述。
常数值描述vbComboDropDown 0 下拉式组合框(缺省值)。
包括⼀个⽂本框和⼀个下拉式列表,既可以从列表中选择⼜可以在⽂本框中输⼊。
vbComboSimple 1 简单组合框。
包括⼀个⽂本框和⼀个不能下拉的列表,既可以从列表中选择⼜可以在⽂本框中输⼊。
简单组合框的⼤⼩包括编辑和列表部分。
按默认规定,简单组合框的⼤⼩调整在没有任何列表显⽰的状态。
增加Height属性值可显⽰列表的更多部分。
vbComboDropDownList 2 下拉式列表。
这种样式仅允许从下拉式列表中选择。
例:在窗体上添加三个ComboBox控件,Style属性分别设置为0、1、2。
添加代码:Private Sub Form_Load()Combo1.AddItem "北京"Combo1.AddItem "上海"Combo2.AddItem "北京"Combo2.AddItem "上海"Combo3.AddItem "北京"Combo3.AddItem "上海"End Sub显⽰如下:(2)Click事件⼀般情况下Click事件都是依靠单击⿏标来激活的,但是有些时候也可以通过控件状态的改变来激活。
例:向窗体添加⼀个ComboBox控件,属性值见教材P134表5—12。
ComboBox的使用方法

Combo Box (组合框)控件很简单,可以节省空间。
从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。
用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。
下面的例子简要说明如何利用 MFC CComboBox Class来操作字符串列表。
1、定义控件对应变量假定已经创建了一个Dialog,并且从控件工具箱将 Combo Box 控件拖放到上面。
打开 Class Wizard,添加控件对应变量,如:CComboBox m_cbExamble;在后面的代码中会不断使用这个变量。
2、向控件添加 Items1) 在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
换行用ctrl+回车。
2)利用函数 AddString()向Combo Box 控件添加 Items,如:m_cbExample.AddString(“StringData1”);m_cbExample.AddString(“StringData2”);m_cbExample.AddString(“StringData3”);3)也可以调用函数 InsertString()将 Item插入指定位置 nIndex,如:m_cbExample.InsertString( nIndex, “StringData” );3、从控件得到选定的Item假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。
这里会用到两个函数,如:int nIndex = m_cbExample.GetCurSel();CString strCBText;m_cbExample.GetLBText( nIndex, strCBText);这样,得到的内容就保存在 strCBText中。
若要选取当前内容,可调用函数GetWindowText(strCBText)。
VB组合框(ComboBox)控件常用属性和事件

VB组合框(ComboBox)控件常用属性和事件组合框(ComboBox)控件,是列表框和文本框组成的控件,具有列表框和文本框的功能。
并具有文本框和列表框的大部分属性。
它可以像列表框组合框(ComboBox)控件,是列表框和文本框组成的控件,具有列表框和文本框的功能。
并具有文本框和列表框的大部分属性。
它可以像列表框一样,让用户通过鼠标选择需要的项目,也可以像文本框那样,用键入的方法选择项目。
组合框的基本属性:Name、Height、width、T op、L,eft、Enabled、Visible和Index等。
组合框与列表框具有相同的属性:List、ListIndex、ListCount、Selected、Sorted、 Text、MultiSelect,Style等。
组合框的特有属性:组合框有3种不同的样式,其下拉式组合框、简单组合框可输入内容,但必须通过AddItem方法加入。
组合框的风格是由Style属性值决定的。
设置组合框的Style属性可以选用组合框的3种样Style属性为0时,是下拉式组合框,默认状态;Style属性为1时,是简单组合框;Style属性为2时,是下拉列表框。
(1)下拉组合框下拉组合框,显示在屏幕上的仅是文本编辑器和一个下拉箭头。
执行时,用户可像在文本框中一样直接输入文本,也可单击组合框右侧的下拉箭头,打开列表项供用户选择。
选定某个选项后,此选项将被显示在组合框顶端的文本框中。
这种组合框允许用户输入不属于列表内的选项。
当用户再用鼠标单击下拉箭头时,下拉出来的列表项就会消失,仅显示文本框,这种风格能节省窗体上的空间,因为列表部分在用户选择一个项时将关闭。
(2)简单组合框简单组合框,列出所有的项目供用户选择,右边没有下拉箭头,列表框不能收起和下拉。
与文本编辑器一起显示在、屏幕上。
用户可在文本框中直接输入列表项中没有的选项,也可从列表中选择。
(3)下拉式列表框下拉式列表框与下拉组合框相似,区别是用户不能输入列表框中没有的项,只能在列表中选择。
VFP中的组合框控件(combobox)

VFP中的组合框控件(combobox)一.组合框(combobox):组合框和列表框的功能类似,但使用更为灵活,更为常用.实际上,组合框是由一个文本框和一个列表框组成的,组合框又被称为弹出式菜单.用户使用时,单击文本框右侧的三角即可展开下拉列表,如图27二.组合框常用的属性:见下表注1(rowsourcetype属性可指定的值):0-无,运行时使用列表框的确良additem和addlistitem方法加入1-值,将列表框的内容在设计时直接写在该属性中2-表别名:由columncount确定表中选择的字段.当用户选择列表框时,记录指针将自动移到该记录上3-sql语句:见sql部分,由执行的结果产生.4-查询文件名:见查询部分,由查询结果产生5-数组名6-字段名表:可用表别名作为字段前缀.当用户选择列表项时,记录指针将自动移到该记录上7-文件名描述框架,可包含"*"和"?"来描述在列表框中显示的文件名8-结构9-弹出式菜单,提供向后兼容.原文链接:/article/airfire-2-1279355.html二.组合框常用的方法:见下表三.组合框常用事件:列表框的常用事件为click(单击)事件、dbclick(双击)事件和interactivechange事件(当用户使用键盘或鼠标更改组合框的值时发生的事件,比如,我们单击组合框右侧的三角展开下拉列表时,即会发生此事件)四.组合框示例:修改表单xggz.scx,使用组合框控件展示其中的"文化程度"和"职称"两个字段的内容1.打开表单xggz.scx,该表单的制作方法见第二章第二节内容2.该表单中,"文化程度"和"职称"两个字段的内容原先使用的是文本框控件.我们选中这两上文本框,将其删除.再添加两个组合框,其中Combo1用于展示"文化程度"字段的值,Combo2用于展示"职称"字段的值,如图283.选中combo1,在"属性"窗口中将其rowsoucetype属性值改为"6-字段",将rowsource属性值改为"职工档案.文化程度",并将combo1的ctrolsource属值设为"职工档案.文化程度".同样方法,设combo2的rowsourcetype属性值设为"6-字段",将rowsource属性值设为"职工档案.职称",并将其controlsource属性值设为"职工档案.职称".4.运行修改后的xggz.scx表单,如图30,我们可以看到,单击"上一条","下一条"等命令按钮时,每条记录的"文化程度"和"职称"均不同.单击combo1和combo2,在列表中选择一个值,程序即用该值来更改表中相应字段的值.。
易语言组合框列表项目

易语言组合框列表项目什么是易语言组合框列表项目?在易语言编程语言中,组合框列表项目(Combo Box)是用于在用户界面中显示一组选项的控件。
组合框由一个可编辑的文本框和一个下拉列表框组成,用户可以在文本框中输入内容,也可以从下拉列表中选择一个选项。
组合框列表项目的基本特性1.文本框输入:用户可以在组合框的文本框中直接输入内容。
这个输入可以是任意文本,包括数字、字母、符号等。
用户输入的内容可以用于后续的处理和判断。
2.下拉列表选择:组合框的下拉列表中通常包含多个选项,用户可以通过点击下拉箭头展开列表,并选择一个选项作为当前的值。
选项可以是文本、图片或图标等。
3.自动完成:组合框可以通过自动完成的功能,快速匹配用户输入的内容并显示匹配项。
用户可以通过键盘上下箭头来选择匹配项。
4.数据绑定:组合框可以与数据源进行绑定,以便将数据显示在下拉列表中。
数据源可以是一个数组、数据库查询结果或者其他的数据集。
5.事件响应:组合框可以注册事件响应函数。
当用户输入文本、选择列表项或者点击组合框时,相应的事件会触发,从而执行相应的逻辑。
易语言中的组合框控件易语言的开发环境提供了基于Windows API封装的组合框控件,开发者可以通过简单的代码实现组合框的创建、设置属性和处理事件等。
以下是一个示例代码:' 创建一个组合框控件,命名为combo_box' 设置组合框的坐标、尺寸和属性' 绑定数据源,设置自动完成和事件响应函数combo_box.Create(100, 100, 200, 25)combo_box.EnableAutoMatch(True)combo_box.BindDataSource(data_source)combo_box.OnEvent(EventType.TextChange, "on_text_change")combo_box.OnEvent(EventType.ItemSelect, "on_item_select")' 自定义的事件响应函数Function on_text_change(text As String) As Integer' 处理文本变化事件的逻辑End FunctionFunction on_item_select(index As Integer) As Integer' 处理选项选择事件的逻辑End Function总结易语言的组合框列表项目是用户界面中常用的控件之一。
ComboBox控件的用法(转载)

ComboBox控件的用法(转载)一、如何添加/删除Combo Box内容1,在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
换行用ctrl+回车。
2,在程序初始化时动态添加如://控件内容初始化CString strTemp;((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetConte nt();//消除现有所有内容for(int i=1;i<=100;i++){strTemp.Format("%d",i);((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(st rTemp);}3,下拉的时候添加如:CString strTemp;intiCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCou nt();//取得目前已经有的行数if(iCount<1)//防止重复多次添加{((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetConte nt();for(int i=1;i<=100;i++){strTemp.Format("%d",i);((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(st rTemp);}}4,删除DeleteString( UINT nIndex )//删除指定行,5,插入InsertString( int nIndex, LPCTSTR lpszItem )//将行插入到指定位置6,查找FindString( int nStartAfter, LPCTSTR lpszItem )//可以在当前所有行中查找指定的字符串的位置,nStartAfter指明从那一行开始进行查找。
C#中combobox控件属性、事件、方法

C#中combobox控件属性、事件、⽅法/baggio7095586/article/details/6150075⼀、combobox 属性、事件、⽅法公共属性名称说明AccessibilityObject获取分配给该控件的 AccessibleObject。
AccessibleDefaultActionDescription获取或设置控件的默认操作说明,供辅助功能客户端应⽤程序使⽤。
AccessibleDescription获取或设置辅助功能客户端应⽤程序使⽤的控件说明。
AccessibleName获取或设置辅助功能客户端应⽤程序所使⽤的控件名称。
AccessibleRole获取或设置控件的辅助性⾓⾊AllowDrop获取或设置⼀个值,该值指⽰控件是否可以接受⽤户拖放到它上⾯的数据。
Anchor获取或设置控件绑定到的容器的边缘并确定控件如何随其⽗级⼀起调整⼤⼩。
AutoCompleteCustomSource获取或设置在 AutoCompleteSource 属性设置为 CustomSource 时使⽤的⾃定义 System.Collections.Specialized.StringCollection AutoCompleteMode获取或设置控制⾃动完成如何作⽤于 ComboBox 的选项。
AutoCompleteSource获取或设置⼀个值,该值指定⽤于⾃动完成的完整字符串源。
AutoScrollOffset获取或设置⼀个值,该值指⽰在 ScrollControlIntoView 中将控件滚动到何处。
BindingContext获取或设置控件的 BindingContext。
Bottom获取控件下边缘与其容器的⼯作区上边缘之间的距离(以像素为单位)。
Bounds获取或设置控件(包括其⾮⼯作区元素)相对于其⽗控件的⼤⼩和位置(以像素为单位)。
CanFocus获取⼀个值,该值指⽰控件是否可以接收焦点。
ComboBoxEdit?方法与属性设置

ComboBoxEdit 方法与属性设置1:读取ComboBoxEdit选中值的方法comboBoxEdit1.Properties.Items[comboBoxEdit1.SelectedIn dex].ToString()使用前需要先确认comboBoxEdit1.SelectedIndex不能等于-1,不然报错。
2 :ComboBoxEdit也是DevExpress winform控件中经常使用的一个,我们在使用的过程中可能有时需要对ComboBoxEdit控件进行数据绑定,而ComboBoxEdit控件不像LookUpEdit控件拥有DataSource属性,可以直接绑定一个数据集。
下面我们使用ComboBoxEdit的comboBoxEdit1.Properties.Items.Add(object item)方法来实现数据绑定.1.先用GetAreaDataTable方法返回一个DataTable,代码如下:public static DataT able GetAreaDataT able(){string sqlStr = "select BMMC from usiCLB where BMLID=3";DataBase db = new DataBase();DataTable dt = db.GetDataTable(sqlStr);return dt;}2.然后将数据循环添加到ComboBoxEdit中,代码如下:private void LoadComboBoxEdit(){boBoxEdit1.Properties.NullText = "请选择...";DataTable dt = UserInfo.GetAreaDataTable();for (int i = 0; i < dt.Rows.Count; i++){comboBoxEdit1.Properties.Items.Add(dt.Rows[i]["BMMC"].T oString());}}3:ComboBoxEdit只可输入不可编辑属性设置boBoxEdit1.Properties.TextEditStyle=DevExpress.Xtr aEditors.Controls.T extEditStyles.DisableTextEditor;4:ComboBoxEdit是否排序后显示boBoxEdit1.Properties.Sorted = false;。
jQueryEasyUIAPI中文文档-ComboBox组合框

jQueryEasyUIAPI中⽂⽂档-ComboBox组合框扩展⾃ $bo.defaults。
⽤ $bobox.defaults 重写了 defaults。
依赖 combo ⽤法 <select id="cc" name="dept" style="width:200px;"> <option value="aa">aitem1</option><option>bitem2</option> <option>bitem3</option> <option>ditem4</option> <option>eitem5</option> </select> <inputid="cc" name="dept" value="aa"> 复制代码代码如下: $('#cc').combobox({ url:'combobox_data.json', valueField:'id', textField:'text' }); json 数据格式的⽰例复制代码代码如下: [{ "id":1, "text":"text1" },{ "id":2, "text":"text2" },{ "id":3, "text":"text3", "selected":true },{ "id":4, "text":"text4" },{ "id":5, "text":"text5" }]其特性扩展⾃ combo,下列是为combobox 增加的特性。
WPF中往ComboBox里添加选项并指定默认选项

WPF中往ComboBox里添加选项并指定默认选项这ComboBox里可以在XAML中直接给它添加选项,这里不直接废话,下面是在你要添加的ComboBox在XAML中的实现:1<ComboBox x:Name="MyComBox" Height="20" Canvas.Left="110" Canvas.To p="255" Width="86" DisplayMemberPath="Frequ"SelectionChanged="myComboB ox_SelectionChanged">注意代码里在ComboBox属性里的DisplayMemberPath="Frequ" 这个是一种绑定也是填充选项的关键,要与C#里的定义的结构体的成员名字一致。
这个事件是当你选择ComboBox 里的选项时触发的事件SelectionChanged="myComboBox_SelectionChanged"。
接着是定义结构体:1public struct Frequency2 {3public int ID{get;set;}4public string Frequ{get;set;}5 }里面的ID可以不设置,但很重要,当我们选择选项的时候可以用index处理我们的选择,其中关于取到选项的索引很容易但要取到选项的内容好像不太容易。
1 List<Frequency> list = new List<Frequency>();2 Frequency freq = new Frequency();3for(int i = 0; i < lFreq.Length; i++)4 {5 freq.ID = i;6 freq.Frequ = lFreq[i].ToString();7 list.Add(freq);8 }50this.MyComBox.ItemsSource = list;//这里MyComBox是我们控件的ID51this.MyComBox.SelectedIndex = 0;5253// 在此点之下插入创建对象所需的代码。
Qt基础教程之QComboBox下拉框及用法

QComboBox 是下拉列表框组件类,它提供一个下拉列表供用户选择,也可以直接当作一个 QLineEdit 用作输入。
QComboBox 除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个 QVariant 类型的变量,用于存储一些不可见数据。
实例演示 QComboBox(和 QPlainTextEdit,后续会讲)的使用,其运行时界面如图 1 所示。
图 1 实例 samp4_6 运行界面QComboBox 的用法设计时属性设置QComboBox 主要的功能是提供一个下拉列表供选择输入。
在界面上放置一个 QComboBox 组件后,双击此组件,可以出现如图 2 所示的对话框,对QComboBox 组件的下拉列表的项进行编辑。
在图 2 所示的对话框中,可以进行编辑,如添加、删除、上移、下移操作,还可以设置项的图标。
图 2 QComboBox 组件设计时的列表项编辑器用代码添加简单项窗口上的“初始化列表”按钮初始化下拉列表框的列表内容,其代码如下:void Widget::on_btnIniItems_clicked(){ //"初始化列表"按键QIcon icon;icon.addFile(":/images/icons/aim.ico");ui->comboBox->clear(); //清除列表for (int i=0;i<20;i++)ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //带图标//ui->comboBox->addItem(QString::asprintf("Item %d",i)); //不带图标}添加一个项时可以指定一个图标,图标来源于资源文件。
addItem() 用于添加一个列表项,如果只是添加字符串列表项,而且数据来源于一个 QStringList 变量,可以使用 addltems() 函数,示例代码如下:ui->comboBox->clear();QStringList strList;strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";ui->comboBox->addItems(strList);添加具有用户数据的项 QComboBox::addltem() 函数的两种参数的原型定义如下:不管是哪一个 addItem() 函数,后面都有一个可选的 QVariant 类型的参数 userData,可以利用这个变量存储用户定义数据。
PyQt5下拉式复选框QComboCheckBox

PyQt5下拉式复选框QComboCheckBox from PyQt5.QtWidgets import QWidget, QComboBox, QLineEdit, QListViewfrom PyQt5.QtGui import QStandardItemModel, QStandardItem, QMouseEventfrom PyQt5.Qt import Qtdef show_text(function):def wrapped(self, *args, **kwargs):if self.vars["showTextLock"]:self.vars["showTextLock"] = Falseresult = function(self, *args, **kwargs)items = self.get_selected()l = len(items)l_ = self.vars["listViewModel"].rowCount() - 1self.vars["listViewModel"].item(0).setCheckState(Qt.Checked if l == l_ else Qt.Unchecked if l == 0 else Qt.PartiallyChecked)self.vars["lineEdit"].setText("(全选)" if l == l_ else "(⽆选择)" if l == 0 else ";".join((item.text() for item in items)))self.vars["showTextLock"] = Trueelse:result = function(self, *args, **kwargs)return resultreturn wrappedclass QComboCheckBox(QComboBox):class MyListView(QListView):def __init__(self, parent: QWidget = None, vars=None):super().__init__(parent)self.vars = varsdef mousePressEvent(self, event: QMouseEvent):self.vars["lock"] = Falsesuper().mousePressEvent(event)def mouseDoubleClickEvent(self, event: QMouseEvent):self.vars["lock"] = Falsesuper().mouseDoubleClickEvent(event)def __init__(self, parent: QWidget = None):super().__init__(parent)self.vars = dict()self.vars["lock"] = Trueself.vars["showTextLock"] = True# 装饰器锁,避免批量操作时重复改变lineEdit的显⽰self.vars["lineEdit"] = QLineEdit(self)self.vars["lineEdit"].setReadOnly(True)self.vars["listView"] = self.MyListView(self, self.vars)self.vars["listViewModel"] = QStandardItemModel(self)self.setModel(self.vars["listViewModel"])self.setView(self.vars["listView"])self.setLineEdit(self.vars["lineEdit"])self.activated.connect(self.__show_selected)self.add_item("(全选)")def count(self):# 返回⼦项数return super().count() - 1@show_textdef add_item(self, text: "str"):# 根据⽂本添加⼦项item = QStandardItem()item.setText(text)item.setCheckable(True)item.setCheckState(Qt.Checked)self.vars["listViewModel"].appendRow(item)@show_textdef add_items(self, texts: "tuple or list"):# 根据⽂本列表添加⼦项for text in texts:self.add_item(text)@show_textdef clear_items(self):# 清空所有⼦项self.vars["listViewModel"].clear()self.add_item("(全选)")def find_index(self, index: "int"):# 根据索引查找⼦项return self.vars["listViewModel"].item(index if index < 0 else index + 1)def find_indexs(self, indexs: "tuple or list"):# 根据索引列表查找⼦项return [self.find_index(index) for index in indexs]def find_text(self, text: "str"):# 根据⽂本查找⼦项tempList = self.vars["listViewModel"].findItems(text)tempList.pop(0) if tempList and tempList[0].row() == 0 else tempListreturn tempListdef find_texts(self, texts: "tuple or list"):# 根据⽂本列表查找⼦项return {text: self.find_text(text) for text in texts}def get_text(self, index: "int"):# 根据索引返回⽂本return self.vars["listViewModel"].item(index if index < 0 else index + 1).text() def get_texts(self, indexs: "tuple or list"):# 根据索引列表返回⽂本return [self.get_text(index) for index in indexs]def change_text(self, index: "int", text: "str"):# 根据索引改变某⼀⼦项的⽂本self.vars["listViewModel"].item(index if index < 0 else index + 1).setText(text) @show_textdef select_index(self, index: "int", state: "bool" = True):# 根据索引选中⼦项,state=False时为取消选中self.vars["listViewModel"].item(index if index < 0 else index + 1).setCheckState( Qt.Checked if state else Qt.Unchecked)@show_textdef select_indexs(self, indexs: "tuple or list", state: "bool" = True):# 根据索引列表选中⼦项,state=False时为取消选中for index in indexs:self.select_index(index, state)@show_textdef select_text(self, text: "str", state: "bool" = True):# 根据⽂本选中⼦项,state=False时为取消选中for item in self.find_text(text):item.setCheckState(Qt.Checked if state else Qt.Unchecked)@show_textdef select_texts(self, texts: "tuple or list", state: "bool" = True):# 根据⽂本列表选中⼦项,state=False时为取消选中for text in texts:self.select_text(text, state)@show_textdef select_reverse(self):# 反转选择if self.vars["listViewModel"].item(0).checkState() == Qt.Unchecked:self.select_all()elif self.vars["listViewModel"].item(0).checkState() == Qt.Checked:self.select_clear()else:for row in range(1, self.vars["listViewModel"].rowCount()):self.__select_reverse(row)def __select_reverse(self, row: "int"):item = self.vars["listViewModel"].item(row)item.setCheckState(Qt.Unchecked if item.checkState() == Qt.Checked else Qt.Checked) @show_textdef select_all(self):# 全选for row in range(0, self.vars["listViewModel"].rowCount()):self.vars["listViewModel"].item(row).setCheckState(Qt.Checked)@show_textdef select_clear(self):# 全不选for row in range(0, self.vars["listViewModel"].rowCount()):self.vars["listViewModel"].item(row).setCheckState(Qt.Unchecked)@show_textdef remove_index(self, index: "int"):# 根据索引移除⼦项return self.vars["listViewModel"].takeRow(index if index < 0 else index + 1)@show_textdef remove_indexs(self, indexs: "tuple or list"):# 根据索引列表移除⼦项return [self.remove_index(index) for index in sorted(indexs, reverse=True)]@show_textdef remove_text(self, text: "str"):# 根据⽂本移除⼦项items = self.find_text(text)indexs = [item.row() for item in items]return [self.vars["listViewModel"].takeRow(index) for index in sorted(indexs, reverse=True)] @show_textdef remove_texts(self, texts: "tuple or list"):# 根据⽂本列表移除⼦项return {text: self.remove_text(text) for text in texts}def get_selected(self):# 获取当前选择的⼦项items = list()for row in range(1, self.vars["listViewModel"].rowCount()):item = self.vars["listViewModel"].item(row)if item.checkState() == Qt.Checked:items.append(item)return itemsdef is_all(self):# 判断是否是全选return True if self.vars["listViewModel"].item(0).checkState() == Qt.Checked else False def sort(self, order=Qt.AscendingOrder):# 排序,默认正序self.vars["listViewModel"].sort(0, order)@show_textdef __show_selected(self, index):if not self.vars["lock"]:if index == 0:if self.vars["listViewModel"].item(0).checkState() == Qt.Checked: self.select_clear()else:self.select_all()else:self.__select_reverse(index)self.vars["lock"] = Truedef hidePopup(self):if self.vars["lock"]:super().hidePopup()。
组合框(COMBOBOX)

4.7 组合框(ComboBox)图4-10 组合框的三种形式组合框(ComboBox)是由文本框和列表框组合而成的控件。
组合框有三种形式:下拉式组合框、简单组合框和下拉式列表框。
(如图4-10所示)三种形式都能在列表中选择项目,所选项目会显示在文本框中。
“下拉式组合框”和“简单组合框”还可以通过在文本框中输入文本来进行选择。
“下拉式组合框”和“下拉式列表框”均具有能“下拉”和“收起”的列表,可节省空间。
通过Style属性可选择所需的形式。
4.7.1 属性与方法(1)Style属性决定组合框的类型和行为,可选值为0、1、2,默认值为0。
(a)0 – Dropdown Combo(下拉式组合框):正常状态仅显示文本框和下拉按钮;当单击下拉按钮时,会显示列表框供用户选择;再次单击下拉按钮,列表框隐藏,恢复正常状态。
用户可以通过列表框选择项目,也可以在文本框中输入项目文本来进行选择,所选项目会显示在文本框中。
此形式允许用户键入列表框中没有的选项。
(b)1 – Simple Combo(简单组合框):文本框与列表框一起显示,文本框右侧无下拉按钮,列表框固定显示,不能被“拉下”和“收起”。
对项目的选择与下拉式组合框相同。
在设计时,应适当调整组合框的大小,否则执行时有些列表项可能不被显示。
当选项数超过可显示的限度时将自动插入一个垂直滚动条。
(c)2 - Dropdown ListBox(下拉式列表框):外观同下拉式组合框一样,有下拉按钮以及可供“拉下”和“收起”列表框。
与下拉式组合框的有所不同的是,用户不能在列表框中输入选项,而只能在列表中选择。
(2)其他属性与方法组合框的大部分属性和方法与列表框相同,比如要访问控件的项目,可以用List数组;控件的当前选项由控件的Text属性确定;AddItem方法将项目加人到组合框的项目列表中;RemoveItem 方法将组合框中选定的项目删除;Sorted属性决定组合框中的项目是否排序等。
QtStyleSheet实践(二):组合框QComboBox的定制

QtStyleSheet 实践(二):组合框QComboBox 的定制 导读组合框是一个重要且应用广泛的组件,一般由两个子组件组成:文本下拉单部分和按钮部分。
在许多既需要用户选择、又需要用户手动输入的应用场景下,组合框能够很好的满足我们的需求。
如我们经常使用的聊天软件QQ 登录框,便是一个很好的应用例子:显然,用户既可以自己手动输入新的QQ 号码,也可以在列表框中选择历史输入记录。
对于提高用户体验是一个不错的手段。
这篇博文重点讲述如何用QSS 对组合框进行定制。
基本自定义组合框的使用非常简单,为了加快叙述速度,我们直接在Qt Designer 中拖一个QComboBox 控件放到主窗口中。
此时,我们什么都不用做就有了一个简单的组合框,如下:但很显然,我们得添加一个文字,否则QComboBox 不会显示任何内容。
这样出现的组合框样式很普通:一个文本加一个带箭头号的按钮就完了。
既然主题是用QSS 来定制组合框,那么我们第一件事就是新建一个.qss 文件并添加到资源文件中进行编译。
.qss 文件的内容初步编写如下:1 2 3 4 5 6 QComboBox {border: 1px solid gray;border-radius: 3px;padding: 1px 2px 1px 2px; # 针对于组合框中的文本内容 min-width: 9em; # 组合框的最小宽度}我们给组合框3个像素的圆角,边框1个像素宽并将颜色设置为灰色。
看看效果:文本框部分似乎还不错,但是右边的按钮外观实在是太丑了,和整体风格不搭。
我们继续美化一下按钮。
按钮是QComboBox 的一个子组件,用::drop-down 指代。
编写如下QSS 代码:+ View Code可以看到,我们分别将按钮右上角和右下角设置了3个像素的圆角,这是因为我们前面给组合框的整体边框设置了圆角。
如果不给按钮设置圆角,那么按钮的棱角将会遮挡住整体边框的圆角效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ComboBox控件重构设计一、概述Combo Box(以下简称Combox)由一个可编辑或者不可以编辑的文本框和一个列表共同组成。
文本负责显示列表中的选中项。
列表可一直存在并显示,也可以仅在用户点击下拉按钮的情况下才显示出来。
二、现存问题及改进内容1.现存问题现在的dropdownlist经过多次功能开发后,数据结构庞大,不利于维护和扩展。
2.改进内容精简现有结构,通过内嵌控件,达到功能分层和复用代码的目的,同时还整合了应用的功能需求(更新显示,应用回调,丰富显示)。
三、结构图如下图,Combox的可视区域被分为5个子区域:1.Icon,可设置有无。
用于显示提示图标,如搜索框时放置放大镜图标2.Text/Edit,可设置为是否可编辑。
显示选中条目的内容。
在可编辑状态下,会根据以输入内容进行列表条目过滤。
3.展开按钮,可设置有无。
在列表总是显示的情况下,无需显示该按钮。
点击该按钮,列表区域会展开和收起。
4.功能按钮,可设置有无。
在点击后执行设置的回调函数。
5.列表显示区域,可设置是否可收起。
用于显示可选择的条目列表。
四、数据结构1、控件数据结构//combox controltypedef struct _combox_obj_tag{//base ctrlCTRLBASE_OBJ_T base_ctrl;//base控件的属性//control settingGUI_RECT_T box_rect;//用于记录list的区域GUICOMBOX_SHOW_TYPE_E expand_direction; //记录展开的方向uint16 left_space;//左间距uint16 box_list_space;//上下间距BOOLEAN is_right_aligned;//是否右对齐BOOLEAN is_list_fixed;//list是否固定显示BOOLEAN is_dirty;//置脏数据BOOLEAN is_mid_softkey_open_list;//是否支持mid BOOLEAN is_web_key_open_list;//是否支持web //icon settinguint32 icon_id;//icon idBOOLEAN has_icon;//设置是否有icon//text settingMMI_HANDLE_T text_handle;//记录text的handleBOOLEAN can_edit;//设置是否能够editGUICOMBOX_TEXT_TYPE_T edit_info;//记录edit的类型说明:Text需要支持省略显示和滚动显示的模式,此处,我们要根据系统提供的text显示类控件选择合适的来用,比如用label。
//expand button settingMMI_HANDLE_T expand_button_handle; //记录button的handle MMI_IMAGE_ID_T unpressed_arrow_icon;//未按下的下拉箭头图标MMI_IMAGE_ID_T pressed_arrow_icon; //已按下的下拉箭头图标BOOLEAN has_expand_button;// //功能选择(一般用户在窗口的open消息时对其设值。
)//function button settingMMI_HANDLE_T function_button_handle;//记录button的handle BOOLEAN has_function_button; //功能选择(一般用户在窗口的open消息时对其设值。
)MMI_IMAGE_ID_T func_button_icon; //功能按钮图标//list settingMMI_HANDLE_T list_handle;BOOLEAN is_list_expand; // 内部,无需客户设置uint16 page_item_num;//用于计算list的区域(用户设置)uint16 item_height; //list的item高度(list提供了接口就可以删去了)// self member ...} CTRLCOMBOX_OBJ_T;五、对外控制方法/*****************************************************************************/ // Description : Set Expand Direction// Global resource dependence :// Author: hua.fang// Note:设置list的展开方向,有向上,向下,自动三种方式.(不调用时默认自动)/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetExpandDirection(MMI_CTRL_ID_T ctrl_id,GUICOMBOX_SHOW_TYPE_Eexpand_direction);/*****************************************************************************/ // Description : Disable WebKey// Global resource dependence :// Author: hua.fang// Note:设置是否支持web key(用户调用此接口去设置web key是否处理)/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_DisableWebKey(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_web_key_open_list);/*****************************************************************************/ // Description : Disable Mid Softkey// Global resource dependence :// Author: hua.fang// Note:设置是否支持mid key(用户调用此接口去设置mid key是否处理)/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_DisableMidSoftkey(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_mid_softkey_open_list);/*****************************************************************************/ // Description : Set Has Icon// Global resource dependence :// Author: hua.fang// Note:设置是否有icon/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetHasIcon(MMI_CTRL_ID_T ctrl_id,BOOLEAN has_icon);/*****************************************************************************/ // Description : Set Icon Id// Global resource dependence :// Author: hua.fang// Note:设置icon的id/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetIconId(MMI_CTRL_ID_T ctrl_id,uint32 icon_id);/*****************************************************************************/ // Description : Set Can Edit// Global resource dependence :// Author: hua.fang// Note:设置是否能够edit/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetCanEdit(MMI_CTRL_ID_T ctrl_id,BOOLEAN can_edit);/*****************************************************************************/ // Description : Set combox text// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置edit的内容/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetText(MMI_CTRL_ID_T ctrl_id,MMI_STRING_T *str_ptr);/*****************************************************************************/ // Description : Get combox text// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:获取edit的内容/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_GetText(MMI_CTRL_ID_T ctrl_id,MMI_STRING_T *str_ptr //in:/out);/*****************************************************************************/ // Description : Set HasExpand Button// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置是否有expand button/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetHasExpandButton(MMI_CTRL_ID_T ctrl_id,BOOLEAN has_expand_button);/*****************************************************************************/ // Description : Set Has Function Button// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置是否有func button/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetHasFunctionButton(MMI_CTRL_ID_T ctrl_id,BOOLEAN has_function_button);/*****************************************************************************/ // Description : Set Function Button Callback// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置func的回调给button/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetFuncButtonCallBack(MMI_CTRL_ID_Tctrl_id,GUIBUTTON_CALLBACK_FUNC_EXT func,void*user_data //);/*****************************************************************************/ // Description : Add Item Detail// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:添加detail形式的list数据/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_AddItemDetail(MMI_CTRL_ID_T ctrl_id,const GUICOMBOX_DETAIL_STR_DATA_T *data_ptr//item info);/*****************************************************************************/ // Description : Add Item// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:添加detail形式的数组/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_AddItemDetailArray(MMI_CTRL_ID_T ctrl_id,const GUICOMBOX_DETAIL_STR_DATA_T *data_ptr, // appointed Itemuint16 array_size);/*****************************************************************************/ // Description : Add Item// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:添加一个字符串/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_AddItem(MMI_CTRL_ID_T ctrl_id,//const GUILIST_ITEM_T* item_ptr // appointed Itemconst MMI_STRING_T *str_ptr //item info);/*****************************************************************************/ // Description : Add Item// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:添加一个字符串数组/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_AddItemArray(MMI_CTRL_ID_T ctrl_id,const MMI_STRING_T *str_ptr, // appointed Itemuint16 array_size);/*****************************************************************************/ // Description : Insert Item// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:在list中插入一个item/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_InsertItem(MMI_CTRL_ID_T ctrl_id,const GUILIST_ITEM_T* item_ptr,// appointed Itemuint16 pos);/*****************************************************************************/ // Description : Remove Item// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:删除一个item/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_RemoveItem(MMI_CTRL_ID_T ctrl_id,uint16 pos);/*****************************************************************************/ // Description : Remove All Items// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:删除所有的items/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_RemoveAllItems(MMI_CTRL_ID_T ctrl_id);/*****************************************************************************/ // Description : Get Item Count// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:获得item的数目/*****************************************************************************/ PUBLIC uint16 CTRLCOMBOX_GetItemCount(MMI_CTRL_ID_T ctrl_id);/*****************************************************************************/ // Description : Get Item// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:获得某一条item/*****************************************************************************/ PUBLIC const GUILIST_ITEM_T* CTRLCOMBOX_GetItem(MMI_CTRL_ID_T ctrl_id,uint16 index);/*****************************************************************************/ // Description : Get Select Index// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:获取select item的index/*****************************************************************************/ PUBLIC uint16 CTRLCOMBOX_GetSelectIndex(MMI_CTRL_ID_T ctrl_id);/*****************************************************************************/ // Description : Get Select Index// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置select item的index/*****************************************************************************/ PUBLIC uint16 CTRLCOMBOX_SetSelectIndex(MMI_CTRL_ID_T ctrl_id,uint16 index);/*****************************************************************************/ // Description : Set Select Index// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置edit的类型(现在的做法是在用户调用此接口的时候去创建edit控件,// 原因是edit创建时需要的类型是用户在窗口open时传来的,所以只能在这个时候创建edit)/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetEditType(MMI_CTRL_ID_T ctrl_id,const GUICOMBOX_TEXT_TYPE_T *edit_type_ptr);/***************************************************************************//*! // Description : Get Select Index// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:获得edit的类型******************************************************************************* /PUBLIC GUIEDIT_TYPE_E CTRLCOMBOX_GetEditType(MMI_CTRL_ID_T ctrl_id);/***************************************************************************//*! // Description : Set List Item Max Num// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置list的最大数目******************************************************************************* /PUBLIC BOOLEAN CTRLCOMBOX_SetListItemMaxNum(MMI_CTRL_ID_T ctrl_id,uint16 max_item_num,BOOLEAN is_dynamic_item_data);/***************************************************************************//*! // Description : combox has icon// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置icon的id******************************************************************************* /PUBLIC void CTRLCOMBOX_SetIcon(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_show_icon,MMI_IMAGE_ID_T img_id);/***************************************************************************//*! // Description : combox has expand button// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置是否有expand button******************************************************************************* /PUBLIC void CTRLCOMBOX_SetExpandButton(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_show_expand_button);/***************************************************************************//*! // Description : combox has function button// Global resource dependence :// Author: nan.ji & xiyuan.ma// Note:设置是否有func button******************************************************************************* /PUBLIC void CTRLCOMBOX_SetFuncButton(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_show_fucn_button);/*****************************************************************************/ // Description : set rect// Global resource dependence :// Author: hua.fang// Note:设置combox的区域/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetRect(MMI_HANDLE_T ctrl_handle,const GUI_RECT_T* rect_ptr);/*****************************************************************************/ // Description : Set BoxList Space// Global resource dependence :// Author: hua.fang// Note:设置list与combox的间距/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetBoxListSpace(MMI_CTRL_ID_T ctrl_id,uint16 box_list_space);/*****************************************************************************/ // Description : Set RightAligned// Global resource dependence :// Author: hua.fang// Note:设置是否右对齐/*****************************************************************************/ PUBLIC BOOLEAN CTRLCOMBOX_SetRightAligned(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_right_aligned);/*****************************************************************************/ // Description : Set Fixed List// Global resource dependence :// Author: hua.fang// Note:设置是否是固定显示list/*****************************************************************************/PUBLIC BOOLEAN CTRLCOMBOX_SetFixedList(MMI_CTRL_ID_T ctrl_id,BOOLEAN is_list_fixed);六、内部实现1、Combox Layout整个Combox被分为5个区域,combox的layout由Icon Rect、FuncButton Rect、ExpandButton Rect、Edit Rect、List Rect这5个区域的layout组合而成。