ComboBox下拉框汇总
Qt样式表(QComboBox下拉框)
Qt样式表(QComboBox下拉框)/* 未下拉时,QComboBox的样式 */QComboBox {border: 1px solid gray; /* 边框 */border-radius: 3px; /* 圆⾓ */padding: 1px 18px 1px 3px; /* 字体填衬 */color: #000;font: normal normal 15px "Microsoft YaHei";background: transparent;}/* 下拉后,整个下拉窗体样式 */QComboBox QAbstractItemView {outline: 0px solid gray; /* 选定项的虚框 */border: 1px solid yellow; /* 整个下拉窗体的边框 */color: green;background-color: red; /* 整个下拉窗体的背景⾊ */selection-background-color: lightgreen; /* 整个下拉窗体被选中项的背景⾊ */}/* 下拉后,整个下拉窗体每项的样式 */QComboBox QAbstractItemView::item {height: 50px; /* 项的⾼度(设置pComboBox->setView(new QListView());后,该项才起作⽤) */}/* 下拉后,整个下拉窗体越过每项的样式 */QComboBox QAbstractItemView::item:hover {color: #FFFFFF;background-color: lightgreen; /* 整个下拉窗体越过每项的背景⾊ */}/* 下拉后,整个下拉窗体被选择的每项的样式 */QComboBox QAbstractItemView::item:selected {color: #FFFFFF;background-color: lightgreen;}/* QComboBox中的垂直滚动条 */QComboBox QAbstractScrollArea QScrollBar:vertical {width: 10px;background-color: #d0d2d4; /* 空⽩区域的背景⾊*/}QComboBox QAbstractScrollArea QScrollBar::handle:vertical {border-radius: 5px; /* 圆⾓ */background: rgb(160,160,160); /* ⼩⽅块的背景⾊深灰lightblue */}QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover {background: rgb(90, 91, 93); /* 越过⼩⽅块的背景⾊yellow */}/* 设置为可编辑(setEditable(true))editable时,编辑区域的样式 */QComboBox:editable {background: green;}/* 设置为⾮编辑(setEditable(false))!editable时,整个QComboBox的样式 */QComboBox:!editable {background: blue;}/* 设置为可编辑editable时,点击整个QComboBox的样式 */QComboBox:editable:on {background: green;}/* 设置为⾮编辑!editable时,点击整个QComboBox的样式 */QComboBox:!editable:on {background: blue;}/* 设置为可编辑editable时,下拉框的样式 */QComboBox::drop-down:editable {background: lightblue;}/* 设置为可编辑editable时,点击下拉框的样式 */QComboBox::drop-down:editable:on {background: lightgreen;}/* 设置为⾮编辑!editable时,下拉框的样式 */QComboBox::drop-down:!editable {background: lightblue;}/* 设置为⾮编辑!editable时,点击下拉框的样式 */QComboBox::drop-down:!editable:on {background: lightgreen;}/* 点击QComboBox */QComboBox:on {}/* 下拉框样式 */QComboBox::drop-down {subcontrol-origin: padding; /* ⼦控件在⽗元素中的原点矩形。
Combobox下拉框两级联动
Combobox下拉框两级联动下拉框的两级联动是我们开发中经常遇到⼀种情况。
⽐如⼀个学⽣管理系统中,根据年级、科⽬及姓名查询学⽣考试成绩,年级和科⽬都是硬盘中的有限数据(数据库)⽽学⽣则可以有⽤户⼿动指定,这时在数据库中有年级和科⽬两张表,每门科⽬都对应⼀个年级,所以我们可以⽤两个下拉框(Combobox)来存储年级和科⽬信息来供⽤户选择。
界⾯如下:这时如果我们将科⽬对应的下拉框直接绑定科⽬表时,⽤户选择⼀个年级后还要从所有科⽬中进⾏选择就会降低系统的友好性,甚⾄可能出现没有任何意义的查询语句。
我们可以先绑定年级下拉框的数据。
在年级下拉框中的SelectedIndexChange事件中获取年级下拉框中的数据(编号)在⽤得到的数据(年级编号)去查科⽬表,将对应的科⽬信息绑定到科⽬下拉框。
model展开1 int gradeid = Convert.ToInt32(cboGrade.SelectedValue);//获取选定的年级编号 2 3 List list= subjectBll.GetAllSubject(gradeid);//查询指定年继编号下对应的科⽬信息 4 //绑定科⽬下拉框 5 cboSubject.ValueMember = "subjectid"; 6 cboS 返回顶部收缩 1 int gradeid = Convert.ToInt32(cboGrade.SelectedValue);//获取选定的年级编号23 List <Subject> list= subjectBll.GetAllSubject(gradeid);//查询指定年继编号下对应的科⽬信息4 //绑定科⽬下拉框5 cboSubject.ValueMember = "subjectid";6 cboSubject.DisplayMember = "subjectname";7 cboSubject.DataSource = list;下拉框的SelectedValue属性属性原型:常见错误:错误分析:经过实验可以确认将绑定数据源的代码放在属性设置的后边是可以解决这个错误的,个⼈觉得是如果先绑定数据源的话系统会⾃动将valuemember的属性值设置为绑定的集合的类型之后再设置Valuemember时系统不会再对其进⾏更改!。
C#ComboBox下拉显示层次(树)
C#ComboBox下拉显⽰层次(树)数据库中很多时候⽤到树形结构,在界⾯上显⽰时如果是下拉框⼀次性显⽰时需要树结构来体现,看个效果图先:主要是⽤算法补空格,补符号,源码如下:using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace WindowsFormsApplication1 {public partial class Form1 : Form {public Form1() {InitializeComponent();}private List<profile> pList;protected override void OnLoad(EventArgs e) {base.OnLoad(e);pList = new List<profile>();pList.AddRange(new profile[] {new profile { Id = 1, parentId=0, value="A级"},new profile { Id = 2, parentId=0, value="A级"},new profile { Id = 3, parentId=0, value="A级"},new profile { Id = 4, parentId=0, value="A级"},new profile { Id = 5, parentId=0, value="A级"},new profile { Id = 6, parentId=1, value="B级"},new profile { Id = 7, parentId=2, value="B级"},new profile { Id = 8, parentId=2, value="B级"},new profile { Id = 9, parentId=4, value="B级"},new profile { Id = 10, parentId=3, value="B级"},new profile { Id = 11, parentId=7, value="C级"},new profile { Id = 12, parentId=7, value="C级"},new profile { Id = 13, parentId=9, value="C级"},new profile { Id = 14, parentId=9, value="C级"},new profile { Id = 15, parentId=10, value="C级"},new profile { Id = 16, parentId=10, value="C级"},new profile { Id = 17, parentId=13, value="D级"},new profile { Id = 18, parentId=13, value="D级"},new profile { Id = 19, parentId=12, value="D级"},new profile { Id = 20, parentId=17, value="E级"},new profile { Id = 21, parentId=18, value="E级"},new profile { Id = 22, parentId=18, value="E级"},new profile { Id = 23, parentId=21, value="F级"},new profile { Id = 24, parentId=23, value="G级"},new profile { Id = 25, parentId=24, value="H级"},new profile { Id = 26, parentId=12, value="D级"},new profile { Id = 27, parentId=26, value="E级"},new profile { Id = 28, parentId=27, value="F级"},});//实例化⼀个根节点profile rootRoot = new profile();rootRoot.Id = 0;rootRoot.parentId = 0; = "顶级";AppendChildren(pList, rootRoot, 0);List<string> _name = new List<string>();getName(rootRoot, _name);ArrayList list = new ArrayList();for (int i = 0; i < _name.Count; i++) {list.Add(new System.Collections.DictionaryEntry(i, _name[i]));}comboBox1.DataSource = list;comboBox1.DisplayMember = "Value";comboBox1.ValueMember = "Key";//⽤treeView控件显⽰var node = new TreeNode("顶级");this.AddTree(node, 0);this.treeView1.Nodes.Add(node);return;}public void AddTree(TreeNode parentNode, int parentId) {var selectedList = pList.FindAll(item => item.parentId == parentId);foreach (var group in selectedList) {var node = parentNode.Nodes.Add(group.Id.ToString(), group.value);AddTree(node, group.Id);}}private List<int> tag = new List<int>();private void getName(profile p, List<string> name) {//this.listBox1.Items.Add(string.Format("{0}-{1}", p.Id, p.parentId));if (p == null) return;var str = string.Empty;for (var i = 1; i < p.level; i++) {if (tag.Contains(i)) {str += " ";} else {str += "│ ";}}name.Add(string.Format("{0}{1}{2}", str, , p.value, p.parentId, p.Id, p.level)); for (int i = 0; i < tag.Count; i++) {if (tag[i] >= p.level) {tag.Remove(tag[i]);}}if (p.tag == 0) tag.Add(p.level);if (p.profileList != null && p.profileList.Count > 0) {foreach (profile x in p.profileList) {getName(x, name);}}}public void AppendChildren(List<profile> list, profile profile, int count) { try {count++;var id = profile.Id;var subItems = list.Where(ee => ee.parentId == id).ToList();if (subItems.Count > 0) {for (int i = 0; i < subItems.Count; i++) {if (i == subItems.Count - 1) {subItems[i].name = string.Format("{0}{1}", "└--", "");} else {subItems[i].name = string.Format("{0}{1}", "├--", "");}subItems[i].level = count;subItems[i].tag = i == subItems.Count - 1 ? 0 : 1;}profile.profileList = new List<profile>();profile.profileList.AddRange(subItems);}foreach (var subItem in subItems) {AppendChildren(list, subItem, count);}} catch (Exception e) {MessageBox.Show(e.Message);}}}public class profile {public string fill { get; set; }public int tag { get; set; }public string name { get; set; }public int Id { get; set; }public int parentId { get; set; }public string value { get; set; }public int level { get; set; }public List<profile> profileList { get; set; }}。
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,可以利用这个变量存储用户定义数据。
ComboBox列表智能自动下拉
namespace WindowsApplication1
{
public partial class Form1 : Form
{
// 构造函数
public Form1()
{
InitializeComponent();
// 构造数据
loaddata();
}
// 构造数据源
private DataTable mdataSource = new DataTable();
// 初始化数据
// 特殊出标志
private bool flag = false;
/// <summary> ቤተ መጻሕፍቲ ባይዱ
/// combobox 输入事件
/// </summary>
/// <param name="sender"></param>
dr5["value"] = "5";
dt.Rows.Add(dr5);
DataRow dr6 = dt.NewRow();
dr6["name"] = "date";
dr6["value"] = "6";
ComboBox列表智能自动下拉
实际操作步骤和思路如下:
1、在text_changed里触发
2、在比对后要进行加载将要显示相关数据(如动态数据绑定等),向下拉列表添加内容: comboBox1.Items.Add(str); 使用此语句可以添加str到下拉列表中
3、最后,设置 comboBox1.DroppedDown = true; 可以显示下拉列表的内容。
jQueryEasyUI-ComboBox(下拉列表框)
jQueryEasyUI-ComboBox(下拉列表框)⼀、combobox 前台页⾯动态加载显⽰判断输⼊值在下拉列表是否存在var nameStr ='';$(document).ready(function(){$('#customerId').combobox({prompt:'请输⼊或选择客户名称', //prompt属性为没有选中任何选项的时候显⽰的标签如“--性别--”url:'${rc.contextPath}/sale/findBusinessPartnerByName',valueField:'id',textField:'text' ,onClick: function(node) {attributeShow($("#customerId").combotree("getValue"));},filter: function(q, row){ //filter属性模糊查询var opts = $(this).combobox('options');//return row[opts.textField].indexOf(q) == 0;return row[opts.textField].indexOf(q)>-1;//将从头位置匹配改为任意匹配},onLoadSuccess: function(){var partnerId = '${(saleOrder.partnerId)!}';if(partnerId){$('#customerId').combobox('setValue',partnerId);}},onSelect: function(){var partnerId = $("#customerId").combotree("getValue");$("#business_partner_id").val(partnerId);findBusinessPartnerContactByPartnerId(partnerId);findSaleAddressByPartnerId(partnerId);},onChange: function(newValue, oldValue){var v = $("#customerId").combotree("getText");var arr = nameStr.split(',');var index = $.inArray(v, arr);if(index < 0 ){$("#business_partner_id").val('');}else{$("#business_partner_id").val($("#customerId").combobox("getValue"));}},formatter: function(row){var opts = $(this).combobox('options');nameStr += row[opts.textField] + "," ;return row[opts.textField];}});});Combobox⽤法和⽅法参数:1、需要引⼊class=" easyui-combobox”2、参数设置需要在data-options中设置3、属性参数配置:valueField:基础数据值名称绑定到Combobox(提交值)textField:基础数据的字段名称绑定的Combobox(显⽰值)mode:定义当⽂本改变时如何加载列表数据,当设置为remote模式下,什么类型的⽤户将被发送http请求参数名为'q'的服务器,以获取新的数据。
C#WinformComboBox在输入内容时会在下拉菜单中显示根据输入内容查询的结果
C# Winform ComboBox 在输入内容时 会在下拉菜单中显示根据输入内容查询的结果将 ComboBox 的 AutoCompleteMode 属性置为SuggestAppend , AutoCompleteSource 属性置为 ListItems ,然 后给 ComboBox 随便塞几个子项,运行看效果。
扩展:AutoCompleteMode 允许有四种值 :Suggest 在ComboBox 中输入字符后, ComboBox 会自动展开,显示匹配的子项,输入行不受影响,需要自己输入后续 字符,或者在下拉框中点选完整子项。
App end:输入字符后,字符后会自动补充匹配内容 示),但是 ComboBox 不会展开。
按上下键可以在多个匹配内 容中切换。
SuggestA pp end:上述两种模式的组合。
AutoCompleteSource 属性,共有 9 种,指示自动完成将要在 其中进行查找的数据源。
常用的几种如下 :ListItems: 数据源为 ComboBox 的 Item 集合。
FileSystem: 文件系统。
例如输入 后会展开 下的目录列表(或 append 模式下的自动添加 )。
同样的,此数据源也支持文 件名的补全。
None:默认值,指示ComboBox 不使用自动功能。
(以反色显Customsource:自定义数据源。
选用此方式时必须在代码中指 定 ComboBox 的 AutoCompleteCustomSource 属性为你构建的 AutoCompletestringCollection 对象,否则不会生效。
AutoCompleteStringCollection 类似于 List ,将你的数据 add 进去即可。
[ 高质量编程 ]团队成员为您解答,请提出宝贵意见和建议。
谢谢!QQ:176229432补充回答 :首先我需要强调一点,使用拼音首字母检索时可能比较适合DropDownStyle=DropDownList 时。
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)。
MFC中combo下拉框的使用
MFC中combo下拉框的使用组合框控件简介组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(Simple)组合框、下拉式(Dropdown)组合框和下拉列表式(Drop List)组合框。
下面讲讲它们的区别。
简易组合框中的列表框是一直显示的,效果如下图:下拉式组合框默认不显示列表框,只有在点击了编辑框右侧的下拉箭头才会弹出列表框,列表框弹出后如下图:下拉列表式组合框的编辑框是不能编辑的,只能由用户在下拉列表框中选择了某项后,在编辑框中显示其文本。
下拉列表式组合框如下图:经过上面的介绍,大家应该知道,最常用的当属下拉式组合框和下拉列表式组合框了,它们在很多时候能使程序看起来更专业,更简洁,让用户在进行选择操作时更方便。
组合框被操作时会向父窗口发送通知消息,这些通知消息及其含义如下:CBN_CLOSEUP:组合框的列表框组件被关闭,简易组合框不会发送该通知消息CBN_DBLCLK:用户在某列表项上双击鼠标,只有简易组合框才会发送该通知消息CBN_DROPDOWN:组合框的列表框组件下拉,简易式组合框不会发送该通知消息CBN_EDITUPDATE:在编辑框准备显示改变了的正文时发送该消息,下拉列表式组合框不会发送该消息CBN_EDITCHANGE:编辑框的内容被用户改变了,与CBN_EDITUPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的,下拉列表式组合框不会发送该消息CBN_ERRSPACE:组合框无法申请足够的内存来容纳列表项CBN_SELENDCANCEL:表明用户的选择应该取消,当用户在列表框中选择了一项,然后又在组合框控件外单击鼠标时就会导致该消息的发送CBN_SELENDOK:用户选择了一项,然后按了回车键或单击了下滚箭头,该消息表明用户确认了自己所作的选择CBN_KILLFOCUS:组合框失去了输入焦点CBN_SELCHANGE:用户通过单击或移动箭头键改变了列表的选择CBN_SETFOCUS:组合框获得了输入焦点组合框控件的创建MFC将组合框控件的所有操作都封装到了CComboBox类中。
VC++的combobox控件用法汇总
VC++的combobox控件⽤法汇总在VC++程序设计中,combobox控件是再普通不过的窗体元素控件了,⽽对于新⼿来说,掌握combobox 的各种⽤法显得尤其重要,本⽂就来总结⼀些实⽤的combobox控件⽤法,供⼤家参考。
⼀、添加/删除Combo Box内容:1. ⼀般是在ComboBox控件属性的Data标签⾥添加,⼀⾏表⽰ComboBox下拉列表中的⼀⾏,换⾏⽤ctrl+回车。
2. 在程序初始化时动态添加,如:控件内容初始化:CString strTemp;((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();//清除原有内容for(int i=1;i<=100;i++){strTemp.Format("%d",i);((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);}3. 在下拉的时候添加内容项,如: CString strTemp;int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCount();//取得已有⾏数if(iCount<1)//防⽌重复多次添加{((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent();for(int i=1;i<=100;i++){strTemp.Format("%d",i);((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);}}4. 删除内容,那就更简单了,只需⼀⾏:DeleteString(UINT nIndex)5. 插⼊内容项,也挺简单,⼀⾏搞定:将⾏插⼊到指定位置InsertString( int nIndex, LPCTSTR lpszItem )6. 查找,分情况⽽定,这样:FindString( int nStartAfter, LPCTSTR lpszItem )//可在当前所有⾏中查找指定的字符的位置,nStartAfter指明从那⼀⾏开始查找。
Pythontkinter之ComboBox(下拉框)
Pythontkinter之ComboBox(下拉框)1、ComboBox的基础属性# -*- encoding=utf-8 -*-import tkinterfrom tkinter import *from tkinter import ttkif__name__ == '__main__':win = () # 窗⼝win.title('南风⼂轻语') # 标题screenwidth = win.winfo_screenwidth() # 屏幕宽度screenheight = win.winfo_screenheight() # 屏幕⾼度width = 600height = 500x = int((screenwidth - width) / 2)y = int((screenheight - height) / 2)win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # ⼤⼩以及位置value = StringVar()value.set('CCC')values = ['AAA', 'BBB', 'CCC', 'DDD']combobox = bobox(master=win, # ⽗容器height=10, # ⾼度,下拉显⽰的条⽬数量width=20, # 宽度state='readonly', # 设置状态 normal(可选可输⼊)、readonly(只可选)、 disabledcursor='arrow', # ⿏标移动时样式 arrow, circle, cross, plus...font=('', 20), # 字体textvariable=value, # 通过StringVar设置可改变的值values=values, # 设置下拉框的选项)print(combobox.keys()) # 可以查看⽀持的参数combobox.pack()win.mainloop()2、绑定选中事件# -*- encoding=utf-8 -*-import tkinterfrom tkinter import *from tkinter import ttkdef choose(event):# 选中事件print('选中的数据:{}'.format(combobox.get()))print('value的值:{}'.format(value.get()))if__name__ == '__main__':win = () # 窗⼝win.title('南风⼂轻语') # 标题screenwidth = win.winfo_screenwidth() # 屏幕宽度screenheight = win.winfo_screenheight() # 屏幕⾼度width = 600height = 500x = int((screenwidth - width) / 2)y = int((screenheight - height) / 2)win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # ⼤⼩以及位置value = StringVar()value.set('CCC') # 默认选中CCC==combobox.current(2)values = ['AAA', 'BBB', 'CCC', 'DDD']combobox = bobox(master=win, # ⽗容器height=10, # ⾼度,下拉显⽰的条⽬数量width=20, # 宽度state='normal', # 设置状态 normal(可选可输⼊)、readonly(只可选)、 disabledcursor='arrow', # ⿏标移动时样式 arrow, circle, cross, plus...font=('', 20), # 字体textvariable=value, # 通过StringVar设置可改变的值values=values, # 设置下拉框的选项)combobox.bind('<<ComboboxSelected>>', choose)print(combobox.keys()) # 可以查看⽀持的参数combobox.pack()win.mainloop()3、省市联动(选中第⼀个下拉框,⾃动改变第⼆个下拉框的值)from tkinter import StringVarfrom tkinter import Tkfrom tkinter import ttkdef middle_windows(window, width=400, height=500): # 设置窗⼝居中screenwidth = window.winfo_screenwidth() # 屏幕宽度screenheight = window.winfo_screenheight() # 屏幕⾼度x = int((screenwidth - width) / 2) # x轴坐标y = int((screenheight - height) / 2) # y轴坐标window.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 放置窗⼝window.update() # 更新窗⼝def choose(event):widget = event.widget # 当前的组件value = widget.get() # 选中的值print('value:{}'.format(value))if value == 'AAA':value2.set('') # 设置默认是空串combobox2.configure(values=['AAA1', 'AAA2', 'AAA3']) # 重新设置combobox2可下拉的值elif value == 'BBB':value2.set('') # 设置默认是空串combobox2.configure(values=['BBB1', 'BBB2', 'BBB3']) # 重新设置combobox2可下拉的值else:value2.set('') # 设置默认是空串combobox2.configure(values=[]) # 重新设置combobox2可下拉的值if__name__ == '__main__':win = Tk()middle_windows(win)values1 = ['', 'AAA', 'BBB']value1 = StringVar(win)value1.set(values1[0])combobox1 = bobox(master=win, # ⽗容器height=10, # ⾼度,下拉显⽰的条⽬数量width=20, # 宽度state='readonly', # 设置状态 normal(可选可输⼊)、readonly(只可选)、 disabledcursor='arrow', # ⿏标移动时样式 arrow, circle, cross, plus...font=('', 16), # 字体textvariable=value1, # 通过StringVar设置可改变的值values=values1, # 设置下拉框的选项background='pink',)print(combobox1.keys()) # 可以查看⽀持的参数combobox1.bind('<<ComboboxSelected>>', choose) # 绑定选中事件combobox1.pack(pady=(50, 0))value2 = StringVar(win)value2.set('')combobox2 = bobox(master=win, # ⽗容器height=10, # ⾼度,下拉显⽰的条⽬数量width=20, # 宽度state='readonly', # 设置状态 normal(可选可输⼊)、readonly(只可选)、 disabledcursor='arrow', # ⿏标移动时样式 arrow, circle, cross, plus...font=('', 16), # 字体textvariable=value2, # 通过StringVar设置可改变的值 )combobox2.pack(pady=(100, 0))win.mainloop()运⾏。
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()。
c#多选下拉框(ComboBox)
c#多选下拉框(ComboBox)代码如下1using System;2using System.Collections.Generic;3using ponentModel;4using System.Drawing;5using System.Data;6using System.Linq;7using System.Text;8using System.Windows.Forms;9using System.Collections;10using System.Reflection;11using Newtonsoft.Json.Linq;1213namespace ControlsAA14 {15public class ComboBoxEx : ComboBox16 {17 TreeView lst = new TreeView();1819public ComboBoxEx()20 {21this.DrawMode = DrawMode.OwnerDrawFixed;//只有设置这个属性为OwnerDrawFixed才可能让重画起作⽤22 lst.KeyUp += new KeyEventHandler(lst_KeyUp);23 lst.MouseUp += new MouseEventHandler(lst_MouseUp);24// lst.KeyDown += new KeyEventHandler(lst_KeyDown);25 lst.Leave += new EventHandler(lst_Leave);26 lst.CheckBoxes = true;27 lst.ShowLines = false;28 lst.ShowPlusMinus = false;29 lst.ShowRootLines = false;30this.DropDownHeight = 1;31 }3233void lst_Leave(object sender, EventArgs e)34 {35 lst.Hide();36 }37#region Property3839 [Description("选定项的值"), Category("Data")]40public List<TreeNode> SelectedItems41 {42get43 {44 List<TreeNode> lsttn = new List<TreeNode>();45foreach (TreeNode tn in lst.Nodes)46 {47if (tn.Checked)48 {49 lsttn.Add(tn);50 }51 }52return lsttn;53 }54 }5556///<summary>57///数据源58///</summary>59 [Description("数据源"), Category("Data")]60public object DataSource61 {62get;63set;64 }65///<summary>66///显⽰字段67///</summary>68 [Description("显⽰字段"), Category("Data")]69public string DisplayFiled70 {71get;72set;73 }74///<summary>75///值字段77 [Description("值字段"), Category("Data")]78public string ValueFiled79 {80get;81set;82 }83#endregion848586public void DataBind()87 {88this.BeginUpdate();89if (DataSource != null)90 {91if (DataSource is IDataReader)92 {93 DataTable dataTable = new DataTable();94 dataTable.Load(DataSource as IDataReader);9596 DataBindToDataTable(dataTable);97 }98else if (DataSource is DataView || DataSource is DataSet || DataSource is DataTable)99 {100 DataTable dataTable = null;101102if (DataSource is DataView)103 {104 dataTable = ((DataView)DataSource).ToTable();105 }106else if (DataSource is DataSet)107 {108 dataTable = ((DataSet)DataSource).Tables[0];109 }110else111 {112 dataTable = ((DataTable)DataSource);113 }114115 DataBindToDataTable(dataTable);116 }117else if (DataSource is IEnumerable)118 {119 DataBindToEnumerable((IEnumerable)DataSource);120 }121else122 {123throw new Exception("DataSource doesn't support data type: " + DataSource.GetType().ToString());124 }125 }126else127 {128 lst.Nodes.Clear();129 }130131 lst.ItemHeight = this.ItemHeight;132 lst.BorderStyle = BorderStyle.FixedSingle;133 lst.Size = new Size(this.DropDownWidth, this.ItemHeight * (this.MaxDropDownItems - 1) - (int)this.ItemHeight / 2); 134 lst.Location = new Point(this.Left, this.Top + this.ItemHeight + 6);135this.Parent.Controls.Add(lst);136 lst.Hide();137this.EndUpdate();138 }139140141private void DataBindToDataTable(DataTable dt)142 {143foreach (DataRow dr in dt.Rows)144 {145 TreeNode tn = new TreeNode();146if (!string.IsNullOrEmpty(DisplayFiled) && !string.IsNullOrEmpty(ValueFiled))147 {148 tn.Text = dr[DisplayFiled].ToString();149 tn.Tag = dr[ValueFiled].ToString();150 }151else if (string.IsNullOrEmpty(ValueFiled))152 {153 tn.Text = dr[DisplayFiled].ToString();154 tn.Tag = dr[DisplayFiled].ToString();155 }156else if (string.IsNullOrEmpty(DisplayFiled))157 {158 tn.Text = dr[ValueFiled].ToString();159 tn.Tag = dr[ValueFiled].ToString();161else162 {163throw new Exception("ValueFiled和DisplayFiled⾄少保证有⼀项有值"); 164 }165166 tn.Checked = false;167 lst.Nodes.Add(tn);168 }169 }170171///<summary>172///绑定到可枚举类型173///</summary>174///<param name="enumerable">可枚举类型</param>175private void DataBindToEnumerable(IEnumerable enumerable)176 {177 IEnumerator enumerator = enumerable.GetEnumerator();178while (enumerator.MoveNext())179 {180object currentObject = enumerator.Current;181 lst.Nodes.Add(CreateListItem(currentObject));182 }183 }184185186187private TreeNode CreateListItem(Object obj)188 {189 TreeNode item = new TreeNode();190191if (obj is string)192 {193 item.Text = obj.ToString();194 item.Tag = obj.ToString();195 }196else197 {198if (DisplayFiled != "")199 {200 item.Text = GetPropertyValue(obj, DisplayFiled);201 }202else203 {204 item.Text = obj.ToString();205 }206207if (ValueFiled != "")208 {209 item.Tag = GetPropertyValue(obj, ValueFiled);210 }211else212 {213 item.Tag = obj.ToString();214 }215 }216return item;217 }218219220private string GetPropertyValue(object obj, string propertyName)221 {222object result = null;223224 result = ObjectUtil.GetPropertyValue(obj, propertyName);225return result == null ? String.Empty : result.ToString();226 }227228#region override229230231protected override void OnKeyUp(KeyEventArgs e)232 {233base.OnKeyDown(e);234bool Pressed = (e.Control && ((e.KeyData & Keys.A) == Keys.A));235if (Pressed)236 {237this.Text = "";238for (int i = 0; i < lst.Nodes.Count; i++)239 {240 lst.Nodes[i].Checked = true;241if (this.Text != "")242 {243this.Text += ",";245this.Text += lst.Nodes[i].Tag;246 }247 }248 }249250protected override void OnMouseDown(MouseEventArgs e)251 {252this.DroppedDown = false;253254 }255256protected override void OnMouseUp(MouseEventArgs e)257 {258this.DroppedDown = false;259 lst.Focus();260 }261262protected override void OnDropDown(EventArgs e)263 {264string strValue = this.Text;265if (!string.IsNullOrEmpty(strValue))266 {267 List<string> lstvalues = strValue.Split(',').ToList<string>();268foreach (TreeNode tn in lst.Nodes)269 {270if (tn.Checked && !lstvalues.Contains(tn.Tag.ToString()) && !string.IsNullOrEmpty(tn.Tag.ToString().Trim())) 271 {272 tn.Checked = false;273 }274else if (!tn.Checked && lstvalues.Contains(tn.Tag.ToString()) && !string.IsNullOrEmpty(tn.Tag.ToString().Trim())) 275 {276 tn.Checked = true;277 }278 }279 }280281 lst.Show();282283 }284#endregion285286private void lst_KeyUp(object sender, KeyEventArgs e)287 {288this.OnKeyUp(e);289 }290291private void lst_MouseUp(object sender, MouseEventArgs e)292 {293try294 {295this.Text = "";296for (int i = 0; i < lst.Nodes.Count; i++)297 {298if (lst.Nodes[i].Checked)299 {300if (this.Text != "")301 {302this.Text += ",";303 }304this.Text += lst.Nodes[i].Tag;305 }306 }307 }308catch309 {310this.Text = "";311 }312bool isControlPressed = (Control.ModifierKeys == Keys.Control);313bool isShiftPressed = (Control.ModifierKeys == Keys.Shift);314if (isControlPressed || isShiftPressed)315 lst.Show();316else317 lst.Hide();318 }319320 }321322323///<summary>324///对象帮助类325///</summary>326public class ObjectUtil327 {329///获取对象的属性值330///</summary>331///<param name="obj">可能是DataRowView或⼀个对象</param>332///<param name="propertyName">属性名</param>333///<returns>属性值</returns>334public static object GetPropertyValue(object obj, string propertyName)335 {336object result = null;337338try339 {340if (obj is DataRow)341 {342 result = (obj as DataRow)[propertyName];343 }344else if (obj is DataRowView)345 {346 result = (obj as DataRowView)[propertyName];347 }348else if (obj is JObject)349 {350 result = (obj as JObject).Value<JValue>(propertyName).Value; //.getValue(propertyName);351 }352else353 {354 result = GetPropertyValueFormObject(obj, propertyName);355 }356 }357catch (Exception)358 {359// 找不到此属性360 }361362return result;363 }364365///<summary>366///获取对象的属性值367///</summary>368///<param name="obj">对象</param>369///<param name="propertyName">属性名("Color"、"BodyStyle"或者"erName")</param>370///<returns>属性值</returns>371private static object GetPropertyValueFormObject(object obj, string propertyName)372 {373object rowObj = obj;374object result = null;375376if (propertyName.IndexOf(".") > 0)377 {378string[] properties = propertyName.Split('.');379object tmpObj = rowObj;380381for (int i = 0; i < properties.Length; i++)382 {383 PropertyInfo property = tmpObj.GetType().GetProperty(properties[i], BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 384if (property != null)385 {386 tmpObj = property.GetValue(tmpObj, null);387 }388 }389390 result = tmpObj;391 }392else393 {394 PropertyInfo property = rowObj.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 395if (property != null)396 {397 result = property.GetValue(rowObj, null);398 }399 }400401return result;402 }403 }404 }View Code。
qtcombobox下拉框使用
qtcombobox下拉框使⽤打开新建项⽬中的界⾯⽂件(**.ui)向窗⼝中拖⼊⼀个Combo Box控件,双击Combo Box对象,添加下拉菜单的选项。
可以在属性编辑栏,编辑对象的属性。
三、信号函数选中Combo Box,右键“转到槽”,⾥边有可选的槽函数。
currentIndexChanged(QString/ int )以及currentTextChanged(QString)。
这两个函数的⽤法是:当Combo Box对象当前值发⽣改变时,会激发上⾯的信号函数。
下⾯,我们创建3个Combo Box对象,分别取名为:com_index_int、com_index_string、com_text。
其下拉菜单选项分别为A1~A4,B1~B4,C1~C4。
如下图所⽰:然后依次选中,右键转到槽,分别选择currentIndexChanged(int)、currentIndexChanged(QString)、currentTextChanged(QString)。
在mainwindow.cpp的槽函数中添加如下代码://若当前对象com_index_int值发⽣改变则触发此函数void MainWindow::on_com_index_int_currentIndexChanged(int index){//将当前索引赋值给变量index,输出当前选项名index = ui->com_index_int->currentIndex();qDebug()<<"Index"<< index <<": "<< ui->com_index_int->currentText();}//若当前对象com_index_string值发⽣改变则触发此函数void MainWindow::on_com_index_string_currentIndexChanged(const QString &arg1){//将当前选项名赋值给变量str,输出当前选项名QString str = ui->com_index_string->currentText();qDebug()<<"Text:"<< str;}//若当前对象com_index_string值发⽣改变则触发此函数void MainWindow::on_com_text_currentTextChanged(const QString &arg1){//将当前选项名赋值给变量str,输出当前选项名QString str = ui->com_text->currentText();qDebug() <<"Text:"<< ui->com_text->currentText();}结果⽣成exe⽂件,当改变任意选项时,会调试信息输出:item.count( ) 返回item数⽬item.currentIndex( ) 返回当前返回索引(从0开始)item.currentText( ) 返回当前选择内容item.itemText(index) 返回当前index的内容item.setCurrentIndex( index ) 设置index为当前选择setEditable( true ) 设置选框可编辑setEditText( string ) 设置编辑框内容setItemText( index,string) 设置index内容为string其余的还有插⼊,清除,添加item项的函数,在ui界⾯上设置更为便捷,以后有⽤到再更新。
MiniUi绑定mini-combobox下拉框
MiniUi绑定mini-combobox下拉框⼀:最先开始后台使⽤json字符串绑定combobox[{"id":1,"value":"是","text":"是"},{"id":0,"value":"否","text":"否"}]然后我忘记json字符串的格式了,id属性没有加"" ,combobox⼀直绑定不上数据,⽽且请注意text属性是combobox的显⽰值,value属性不是显⽰值⼆:combobox的前端界⾯是<input id="InUse"class="mini-combobox" url="@Url.Action("GetInUse")" style="width:150px;" textfield="text" shownullitem="true" allowinput="true" />⽽action⾥返回JsonResult或者string格式都可以public JsonResult GetInUse(){List<JsonData> list = new List<JsonData>();list.Add(new JsonData() { id = 1, text = "是" });list.Add(new JsonData() { id = 0, text = "否" });return Json(list, JsonRequestBehavior.AllowGet);//这⾥使⽤的是get请求}public string GetInUse(){List<JsonData> list = new List<JsonData>();list.Add(new JsonData() { id = 1, text = "是" });list.Add(new JsonData() { id = 0, text = "否" });JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();return jsonSerializer.Serialize(list);}三:除了使⽤MVC提供的 url="@Url.Action("GetInUse")" 的⽅式,还可以在页⾯加载的时候使⽤JavaScript为下拉框赋值<script type="text/javascript">//⽅法⼀var InUse = mini.get("InUse");$.ajax({url: '@Url.Action("GetInUse")',type: 'get',contentType: "application/json",success: function (jsonData) {if (jsonData) {InUse.load(jsonData);}}});//⽅法⼆$(document).ready(function () {var jsonData = [{ 'id': '1', 'text': '是' }, { 'id': '0', 'text': '否' }];mini.get("InUse").load(jsonData);})</script>四:使⽤miniui直接在input标签的date属性⾥设置json数据(过了很多天后补的⼀种⽅法,未测试,如果json格式不对,尝试给id,text属性加单引号)<input id="InUse" name="InUse"class="mini-combobox" style="width: 200px;" textfield="text"valuefield="id" emptytext="请选择..."allowinput="false" shownullitem="true" nullitemtext="请选择..."data="[{id:'1',text:'是'},{id:'0',text:'否'}]" />五:action⾥读取枚举数据public JsonResult GetStatusEnum(bool isAll){try{var list = CommonUtil.GetEnumList<PlanTypeEnum>();var returnList = list.Select(item => new DictionaryEntity{Key = item.Key,Value = item.Value}).ToList();if (isAll){returnList.Insert(0, new DictionaryEntity { Key = -1, Value = "" });}return Json(returnList, JsonRequestBehavior.AllowGet);}catch (Exception ex){throw;}}///<summary>///把枚举描述和值规则拼接字符串///</summary>///<typeparam name="T">枚举</typeparam>///<returns>枚举值,枚举描述;枚举值,枚举描述;枚举值,枚举描述</returns>public static IList<DictionaryEntry> GetEnumList<T>(){List<DictionaryEntry> list = new List<DictionaryEntry>();Dictionary<int, string> dic = GetDictionary(typeof(T));DictionaryEntry entity;foreach (var key in dic.Keys){entity = new DictionaryEntry();entity.Key = key;entity.Value = dic[key];list.Add(entity);}return list;}///<summary>///获取枚举值、描述列表///</summary>///<param name="enumType">枚举类型</param>///<returns>///返回枚举值、描述列表///</returns>private static Dictionary<int, string> GetDictionary(Type enumType){Dictionary<int, string> dic = new Dictionary<int, string>();foreach (int enumValue in Enum.GetValues(enumType)){dic.Add(enumValue, string.Empty);FieldInfo fieldinfo = enumType.GetField(Enum.GetName(enumType, enumValue));if (fieldinfo == null){return null;}Object[] objs = fieldinfo.GetCustomAttributes(typeof(DescriptionAttribute), false);if (objs.Length != 0){DescriptionAttribute da = (DescriptionAttribute)objs[0];dic[enumValue] = da.Description;}}return dic;}前台界⾯//获取Combobox控件值,统⼀调⽤function GetCombobox(ctrlId, url, isAll, isAsync, isSelect, callback) {///<signature>///<summary>加载下拉框控件</summary>///<param name="ctrlId" type="String">要绑定数据的控件ID</param>///<param name="url" type="String">数据请求地址ID</param>///<param name="isAll" type="String">是否包含全部标识</param>///<param name="isAsync" type="String">是否异步</param>///<param name="isSelect" type="String">是否选中</param>///<param name="callback" type="function">回调函数</param>///</signature>if (isAsync == undefined)isAsync = false;if (isAll == undefined)isAll = false;var cbox = mini.get(ctrlId);$.ajax({url: url,type: "post",async: isAsync,data: { isAll: isAll },success: function (text) {if (cbox != undefined) {cbox.setData(text);if (isSelect === undefined || isSelect === true) {cbox.select(0);}//cbox.doValueChanged();} else {alert('获取下拉框对象为空');}if (callback) callback();},error: function (text) {var jsontext = mini.decode(text.responseText);alert(jsontext.Message);return;}});}$(function () {//计划类型GetCombobox('PlanTypeId', '@Url.Action("GetPlanTypeEnum")', false);})计划类型:<input id="PlanTypeId" name="PlanTypeId"class="mini-combobox comboboxWidth" style="width: 130px" valuefield="Key" textfield="Value" onblur="checkComboboxblur('PlanTypeId')" allowinput="true" valuefromselect="true" required=。
Combobox下拉框赋值
Combobox下拉框赋值 1string sql = "select distinct RoleName from tb_Role";2 DataTable dt = SqlHelper.DataTable(sql);3 cmb_Authority.Items.Clear();//移除下拉框中所有集合4foreach (DataRow dr in dt.Rows)//遍历数据表中⾏的数据5 {6 cmb_Authority.Items.Add(dr[0]);//把表中第⼀列的数据添加到下拉框中7 }8if (xiu==0)9 {10 cmb_Authority.SelectedIndex = 0;11 }12if (xiu==1)13 {14 btn_Reg.Text = "修改";15 txt_OperatorName.Text = tb_users.OperatorName;16 txt_UserName.Text = tb_erName;17 txt_UserName.ReadOnly = true;18 txt_Pwd.Text = tb_users.Pwd;19 cmb_Authority.Items.Clear();//移除下拉框中所有集合20 cmb_Authority.Items.Add(tb_users.RoleName);21 cmb_Authority.SelectedIndex = 0;22foreach (DataRow dr in dt.Rows)//遍历数据表中⾏的数据23 {24if (dr[0].ToString()== tb_users.RoleName)25 {26continue;27 }28 cmb_Authority.Items.Add(dr[0]);//把表中第⼀列的数据添加到下拉框中29 }3031 }1string sql = "select * from tb_Role"; //查询数据所有信息2 DataTable dt = SqlHelper.DataTable(sql);3 cmb_Authority.DataSource = dt; //下拉框数据源为dt4 cmb_Authority.DisplayMember = "RoleName";//显⽰成员5 cmb_Authority.ValueMember = "RoleID"; //值成员(类似与索引)67//cmb_Authority.Items.Clear();//移除下拉框中所有集合8//foreach (DataRow dr in dt.Rows)//遍历数据表中⾏的数据9//{10// cmb_Authority.Items.Add(dr[0]);//把表中第⼀列的数据添加到下拉框中11//}12//if (xiu==0)13//{14// cmb_Authority.SelectedIndex = 0;15//}16if (xiu==1)17 {18 btn_Reg.Text = "修改";19 txt_OperatorName.Text = tb_users.OperatorName;20 txt_UserName.Text = tb_erName;21 txt_UserName.ReadOnly = true;22 txt_Pwd.Text = tb_users.Pwd;23 cmb_Authority.SelectedValue = tb_users.RoleID; //(下拉框的值=这个索引)24 }⼀个是书库绑定⼀个是再次循环赋值两种赋值⽅法comboBox1.Items.Add(new { key = "key", value = "value" });ArrayList list = new ArrayList();list.Add(new DictionaryEntry("name", "姓名"));list.Add(new DictionaryEntry("username", "⽤户名"));list.Add(new DictionaryEntry("sfz", "⾝份Y证号"));list.Add(new DictionaryEntry("Tel", "电话号码"));comboBox1.DataSource = list;comboBox1.DisplayMember = "Value";//显⽰出来的。
tkinter中combobox下拉选择控件(九)
tkinter中combobox下拉选择控件(九)combobox控件,下拉菜单控件combobox控件在tkinter中的ttk下简单的实现下:1 import tkinter2 from tkinter import ttk # 导⼊ttk模块,因为下拉菜单控件在ttk中34 wuya = ()5 wuya.title("wuya")6 wuya.geometry("300x200+10+20")78 # 创建下拉菜单9 cmb = bobox(wuya)10 cmb.pack()111213 wuya.mainloop()结果:给下拉菜单中添加内容:1 import tkinter2 from tkinter import ttk # 导⼊ttk模块,因为下拉菜单控件在ttk中34 wuya = ()5 wuya.title("wuya")6 wuya.geometry("300x200+10+20")789 # 创建下拉菜单10 cmb = bobox(wuya)11 cmb.pack()12 # 设置下拉菜单中的值13 cmb['value'] = ('上海','北京','天津','⼴州')1415 # 设置默认值,即默认下拉框中的内容16 cmb.current(2)17 # 默认值中的内容为索引,从0开始1819 wuya.mainloop()结果:绑定事件:1 import tkinter2 from tkinter import ttk # 导⼊ttk模块,因为下拉菜单控件在ttk中34 wuya = ()5 wuya.title("wuya")6 wuya.geometry("300x200+10+20")789 # 创建下拉菜单10 cmb = bobox(wuya)11 cmb.pack()12 # 设置下拉菜单中的值13 cmb['value'] = ('上海','北京','天津','⼴州')1415 # 设置默认值,即默认下拉框中的内容16 cmb.current(2)17 # 默认值中的内容为索引,从0开始1819 # 执⾏函数20 def func(event):21 text.insert('insert',cmb.get()+"\n")22 cmb.bind("<<ComboboxSelected>>",func)2324 text = tkinter.Text(wuya)25 text.pack()2627 wuya.mainloop()结果:。
【PyQt5-QtDesigner】QComboBox-下拉列表框
【PyQt5-QtDesigner】QComboBox-下拉列表框知识点:1、QComboBox下拉列表框的⼀些常⽤⽅法2、下拉列表框常⽤信号使⽤⽅法选中下拉框选项时触发信号案例:案例:选中下拉框选项时触发信号#[str] 表⽰comboBox中的选择框内容如A B C D 等boBox.activated[str].connect(self.BrushPhoto)定义的BrushPhoto(self) 函数def BrushPhoto(self, text):if text=="A":self.graphicsView_5.setStyleSheet("border-image: url(:/brush/photo/brush/A.png);")self.lineEdit_58.setText("刷⼦A")elif text=="B":self.graphicsView_5.setStyleSheet("border-image: url(:/brush/photo/brush/B.png);")self.lineEdit_58.setText("刷⼦B")elif text=="C":self.graphicsView_5.setStyleSheet("border-image: url(:/brush/photo/brush/C.png);")self.lineEdit_58.setText("刷⼦C")elif text=="D":self.graphicsView_5.setStyleSheet("border-image: url(:/brush/photo/brush/D.png);")self.lineEdit_58.setText("刷⼦D")elif text=="E":self.graphicsView_5.setStyleSheet("border-image: url(:/brush/photo/brush/E.png);") self.lineEdit_58.setText("刷⼦E")elif text=="F":self.graphicsView_5.setStyleSheet("border-image: url(:/brush/photo/brush/F.png);") self.lineEdit_58.setText("刷⼦F")BrushPhoto 函数。
下拉列表框-QComboBox
下拉列表框-QComboBox QComboBox是⼀个集按钮和下拉选项于⼀体的控件,也被称为下拉列表框。
QComboBox类中的常⽤⽅法: addItem() 添加⼀个下拉选项 addtems() 从列表中添加下拉选项 Clear() 删除下拉选项集合中的所有选项 count() 返回下拉选项集合中的数⽬ currentText() 返回选择选项的⽂本 itemText() 获取索引为i的item的选项⽂本 currentIndex() 返回选中项的索引 setItemText() 改变序号为index项的⽂本QComboBox类中的常⽤信号 Activated 当⽤户选中⼀个下拉选项时发射该信号 currentIndexChanged 当下拉选项的索引发⽣改变时发射该信号 highlighted 当选中⼀个已经选中的下拉选项时,发射该信号案例17 QComboBox按钮的使⽤import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QWidget, QApplication, QCheckBox, QComboBox, QLabel, QVBoxLayoutclass ComboBoxDemo(QWidget):def__init__(self, parent=None):super().__init__(parent)self.setWindowTitle("ComboBox 例⼦")self.resize(300, 90)layout = QVBoxLayout()self.lb1 = QLabel("")self.cb = QComboBox()self.cb.addItem("C")self.cb.addItem("C++")self.cb.addItems(["Java", "C#", "Python"])self.cb.currentIndexChanged.connect(self.selectionchange)layout.addWidget(self.cb)layout.addWidget(self.lb1)self.setLayout(layout)def selectionchange(self, i):self.lb1.setText(self.cb.currentText())print("Items in the list are :")for count in range(self.cb.count()):print("item" + str(count) + "=" + self.cb.itemText(count))print("Current index", i, "selection changed", self.cb.currentText())if__name__ == "__main__":app = QApplication(sys.argv)comboboxdemo = ComboBoxDemo()comboboxdemo.show()sys.exit(app.exec_())。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ComboBoxhwndCtl为此组合框的句柄,lpsz为需要添加的字符串,组合框不能直接通过id添加内容,所以需要得到这个控件的句柄,还得使用GetDlgItem()函数.1C++添加内容ComboBox_AddString(hwndCtl,lpsz)举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);//建立一个组合框,ID可以设置为IDC_C1,然后通过GetDlgItem获取这个组合框的句柄//如果无法正常显示,需要调整此组合框的最大显示范围,在向下箭头上出现上下箭头时可以调整.ComboBox_AddString(hwndCombo1,TEXT("内容1"));ComboBox_AddString(hwndCombo1,TEXT("内容2"));//使用IDC_C1的句柄hwndCombo1,然后添加内容,多次调用可以设置多项文字,//添加的内容通常都放在Main_OnInitDialog()初始化函数中,也可以通过按钮或其他控件调用.[1]获取项目个数ComboBox_GetCount(hwndCtl)这个函数的返回值为int,参数hwndCtl为此组合框控件句柄;举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);int count = ComboBox_GetCount(hwndCombo1);//通过定义count拿到返回值.[1]删除内容ComboBox_DeleteString(hwndCtl, index)hwndCtl为句柄,index为项目索引号,从上至下,从0开始排列,所以0就是删除第一项.举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);ComboBox_DeleteString(hwndCombo1,0);[1]获取索引号ComboBox_GetCurSel(hwndCtl)此函数的返回值为int,返回项目索引号.举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);int count = ComboBox_GetCurSel(hwndCombo1);//获取到索引号.TCHAR str1[256];sprintf(str1,"当前选中的项索引号为:%d",count);//使用sprintf储存说明文字跟索引号,MessageBox(hwnd,str1,TEXT("标题"),MB_OK);ComboBox_DeleteString(hwndCombo1,count);//删除获取此索引号的项.MessageBox(hwnd,TEXT("删除当前选中的项"),TEXT("标题"),MB_OK);//为选中并删除当前项,如果没有选中任何项,返回值为-1.[1]给定选中并显示值ComboBox_SetCurSel(hwndCtl, index)位置的编号由0开始,0表示第一项举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);ComboBox_SetCurSel(hwndCombo1,2);//选择并显示第3项[1]给定并显示值ComboBox_GetLBText(hwndCtl, index, lpszBuffer)hwndCtl句柄,index索引号,lpszBuffer储存字符串举例:HWND hwndCombo1 = GetDlgItem(hwnd,IDC_C1);CString str;ComboBox_GetLBText(hwndCombo1,2, str);//ComboBox_GetLBText不返回值,实际是通过str储存并传递字符串.MessageBox(hwnd,str,TEXT("标题"),MB_OK);//输出某项的str字符串的值.[1]2VB控件在VB中,Combo Box(组合框)控件很简单,可以节省空间。
从用户角度来看,这个控件是由一个文本输入控件和一个下拉菜单组成的。
用户可以从一个预先定义的列表里选择一个选项,同时也可以直接在文本框里面输入文本。
改变下拉框大小1)直接在控件上操作,先点向下的箭头,就可以调整下拉框大小;2)为了让列表框变的更宽,可以用setdroppedwidth(int width)函数来调整列表框的宽度。
定义控件对应变量假定已经创建了一个Dialog,并且从控件工具箱将Combo Box 控件拖放到上面。
打开 Class Wizard,添加控件对应变量,如:CComboBox m_combo。
向控件添加Items1)在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。
换行用ctrl+回车。
若在VS2005中,Items间用";"隔开即可;2)利用函数 AddString()向 Combo Box 控件添加Items,如:m_combo.AddString(“StringData1”);m_combo.AddString(“StringData2”);m_combo.AddString(“StringData3”);3) 也可以调用函数 InsertString() 将 Item 插入指定位置 nIndex,如:m_combo.InsertString(nIndex, “StringData” );4)int GetCount( )可以得到当前列表框中行的数量。
示例代码:程序初始化时动态添加ItemsCString strTemp;m_combo.ResetContent();//消除现有所有内容for(inti=1;i<=100;i++){strTemp.Format("%d",i);m_combo.AddString(strTemp);}从控件得到选定的Item假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。
这里会用到两个函数,如:int nIndex = m_combo.GetCurSel();CString strText;m_combo.GetLBText( nIndex, strText);这样,得到的内容就保存在 strText 中。
若要选取当前内容,可调用函数GetWindowText(strText)。
在控件中查找给定Item这种操作一般用于在程序中动态修改控件中该项的值,可以用函数FindStringExact() 精确匹配,如:int nIndex =m_combo.FindStringExact( nStartAfter, “value to befound”);nStartAfter指明从哪一行开始查找。
如果查找成功,返回的是该项的位置;否则,返回CB_ERR。
也可以选中包含指定字符串的项,如:int nIndex =m_combo.SelectString( nStartAfter, “value to beselected”);删除控件中的Item该操作可以利用函数DeleteString(),需要指定被删除项的位置,如:m_combo.DeleteString(nIndex);也可以使用函数ResetContent(),清除目前的所有项,如:m_combo.ResetContent();显示控件中的某项int nIndex =m_combo.GetCurSel(); //当前选中的项m_combo.SetCurSel(nIndex); //设置第nIndex项为显示的内容取得Combo Box框内容1)取当前内容m_combo.GetWindowText(strTemp);2)取其他行内容m_combo.GetLBText(n,strTemp);获得焦点通常要判断控件是否获得了焦点,可以用GetFocus()函数,例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。
但是combobox 的焦点不同,因为它是由edit和listbox两部分组成,所以获得焦点要用GetParent(),例如:if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))。
设置控件属性1)Sort 属性:设置为 true,则新添加项将按字母顺序插入到列表中;否则,在列表的结尾处插入项。
2)Type属性:设置为Drop List,则使ComboBox不能输入只能在下拉菜单中选择;设置Dropdown,则ComboBox中允许输入内容。
3)No integral height属性,表示最大长度为设计长度,如果实际内容比设计长度多,就出现滚动条,少就以实际长度显示。
得到或设置输入框中被选中的字符位置1)DWORD GetEditSel() /BOOL SetEditSel( int nStartChar, int nEndChar );//得到或设置输入框中被选中的字符位置。
2)BOOL LimitText(int nMaxChars );//设置输入框中可输入的最大字符数。
常用的消息映射宏ON_CBN_DBLCLK 鼠标双击ON_CBN_DROPDOWN 列表框被弹出ON_CBN_KILLFOCUS /ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生ON_CBN_SELCHANGE 列表框中选择的行发生改变ON_CBN_EDITUPDATE 输入框中内容被更新使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。
如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。
在.NET的Server Control中只有DropDownList,而不像Win Form编程一样有ComboBox,但是AjaxControlToolkit中提供了ComboBox,可以提供文本输入功能,并且有SuggestAppend功能。
与Textbox不同的是,ComboBox.Text属性并不能取得文本框中的文本,此属性与ComboBox.SelectedValue完全等同,只能获得下拉列表中的Value。