<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ComboBox</title>
	<atom:link href="https://www.aitaocui.cn/tag/123815/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Mon, 21 Nov 2022 21:44:18 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>ComboBox</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ComboBox(下拉选择的控件)</title>
		<link>https://www.aitaocui.cn/article/193849.html</link>
					<comments>https://www.aitaocui.cn/article/193849.html#respond</comments>
		
		<dc:creator><![CDATA[鲍鲸鲸]]></dc:creator>
		<pubDate>Mon, 21 Nov 2022 21:44:18 +0000</pubDate>
				<category><![CDATA[百科]]></category>
		<category><![CDATA[ComboBox]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=193849</guid>

					<description><![CDATA[hwndCtl为此组合框的句柄，lpsz为需要添加的字符串，组合框不能直接通过id添加内容，所以需要得到这个控件的句柄，还得使用GetDlgItem()函数，为选中并删除当前项。如...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>hwndCtl为此组合框的句柄，lpsz为需要添加的字符串，组合框不能直接通过id添加内容，所以需要得到这个控件的句柄，还得使用GetDlgItem()函数，为选中并删除当前项。如果没有选中任何项,返回值为-1。在.NET的Server Control中只有DropDownList，而不像Win Form编程一样有ComboBox，但是AjaxControlToolkit中提供了ComboBox，可以提供文本输入功能，并且有SuggestAppend功能。与Textbox不同的是，ComboBox.Text属性并不能取得文本框中的文本，此属性与ComboBox.SelectedValue完全等同，只能获得下拉列表中的Value。</p>
</article>
<article>
<h1>C++</h1>
<h2 id="a-c7486364">添加内容</h2>
<p>ComboBox_AddString(hwndCtl，lpsz)</p>
<p>举例:</p>
<p>HWND hwndCombo1=GetDlgItem(hwnd，IDC_C1);</p>
<p>//建立一个组合框，ID可以设置为IDC_C1,然后通过GetDlgItem获取这个组合框的句柄</p>
<p>//如果无法正常显示，需要调整此组合框的最大显示范围，在向下箭头上出现上下箭头时可以调整</p>
<p>ComboBox_AddString(hwndCombo1，TEXT(&quot;内容1&quot;));</p>
<p>ComboBox_AddString(hwndCombo1，TEXT(&quot;内容2&quot;));</p>
<p>//使用IDC_C1的句柄hwndCombo1，然后添加内容，多次调用可以设置多项文字</p>
<p>//添加的内容通常都放在Main_OnInitDialog()初始化函数中，也可以通过按钮或其他控件调用</p>
<h2 id="a-53a503b1">获取项目个数</h2>
<p>ComboBox_GetCount(hwndCtl)</p>
<p>这个函数的返回值为int，参数hwndCtl为此组合框控件句柄;</p>
<p>举例:</p>
<p>HWND hwndCombo1=GetDlgItem(hwnd，IDC_C1);</p>
<p>int count=ComboBox_GetCount(hwndCombo1);</p>
<p>//通过定义count拿到返回值.</p>
<h2 id="a-c4612caa">删除内容</h2>
<p>ComboBox_DeleteString(hwndCtl，index)</p>
<p>hwndCtl为句柄，index为项目索引号，从上至下，从0开始排列,所以0就是删除第一项</p>
<p>举例:</p>
<p>HWND hwndCombo1=GetDlgItem(hwnd，IDC_C1);</p>
<p>ComboBox_DeleteString(hwndCombo1，0);</p>
<h2 id="a-c1ba17f0">获取索引号</h2>
<p>ComboBox_GetCurSel(hwndCtl)</p>
<p>此函数的返回值为int，返回项目索引号.</p>
<p>举例:</p>
<p>HWND hwndCombo1=GetDlgItem(hwnd，IDC_C1);</p>
<p>int count=ComboBox_GetCurSel(hwndCombo1);</p>
<p>//获取到索引号.</p>
<p>TCHAR str1;</p>
<p>sprintf(str1，&quot;当前选中的项索引号为:%d&quot;，count);</p>
<p>//使用sprintf储存说明文字跟索引号，</p>
<p>MessageBox(hwnd，str1，TEXT(&quot;标题&quot;)，MB_OK);</p>
<p>ComboBox_DeleteString(hwndCombo1，count);</p>
<p>//删除获取此索引号的项.</p>
<p>MessageBox(hwnd，TEXT(&quot;删除当前选中的项&quot;)，TEXT(&quot;标题&quot;)，MB_OK);</p>
<p>//为选中并删除当前项，如果没有选中任何项，返回值为-1.</p>
<h2 id="a-3db760df">给定选中并显示值</h2>
<p>ComboBox_SetCurSel(hwndCtl，index)</p>
<p>位置的编号由0开始，0表示第一项</p>
<p>举例:</p>
<p>HWND hwndCombo1=GetDlgItem(hwnd，IDC_C1);</p>
<p>ComboBox_SetCurSel(hwndCombo1，2);</p>
<p>//选择并显示第3项</p>
<h2 id="a-9fae5fcf">给定并显示值</h2>
<p>ComboBox_GetLBText(hwndCtl，index，lpszBuffer)</p>
<p>hwndCtl句柄，index索引号，lpszBuffer储存字符串</p>
<p>举例:</p>
<p>HWND hwndCombo1=GetDlgItem(hwnd，IDC_C1);</p>
<p>CString str;</p>
<p>ComboBox_GetLBText(hwndCombo1，2，str);</p>
<p>//ComboBox_GetLBText不返回值，实际是通过str储存并传递字符串.</p>
<p>MessageBox(hwnd，str，TEXT(&quot;标题&quot;)，MB_OK);</p>
<p>//输出某项的str字符串的值.</p>
<h1>VB控件</h1>
<p>在VB中，Combo Box(组合框)控件很简单也很常用，可以节省空间。从用户角度来看，这个控件是由一个文本输入控件和一个下拉菜单组成的。用户可以从一个预先定义的列表里选择一个选项，同时也可以直接在文本框里面输入文本。</p>
<h2 id="a-5e87e418">改变下拉框大小</h2>
<p>1）直接在控件上操作，先点向下的箭头，就可以调整下拉框大小；</p>
<p>2）为了让列表框变的更宽，可以用setdroppedwidth(int width)函数来调整列表框的宽度。</p>
<h2 id="a-1fc5476e">定义控件对应变量</h2>
<p>假定已经创建了一个Dialog，并且从控件工具箱将Combo Box控件拖放到上面。打开Class Wizard，添加控件对应变量，如：CComboBox m_combo。</p>
<h2 id="a-0e5f5226">向控件添加Items</h2>
<p>1）在Combo Box控件属性的Data标签里面添加，一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。若在VS2005中，Items间用&quot;;&quot;隔开即可；</p>
<p>2）利用函数AddString（）向Combo Box控件添加Items，如：</p>
<p>m_combo.AddString(“StringData1”);</p>
<p>m_combo.AddString(“StringData2”);</p>
<p>m_combo.AddString(“StringData3”);</p>
<p>3)也可以调用函数InsertString()将Item插入指定位置nIndex，如：</p>
<p>m_combo.InsertString(nIndex，“StringData”);</p>
<p>4）int GetCount()可以得到当前列表框中行的数量。</p>
<p>示例代码：程序初始化时动态添加Items</p>
<p>CString strTemp;</p>
<p>m_combo.ResetContent();//消除现有所有内容</p>
<p>for(inti=1;i&lt;=100;i++)</p>
<p>{</p>
<p>strTemp.Format(&quot;%d&quot;，i);</p>
<p>m_combo.AddString(strTemp);</p>
<p>}</p>
<h2 id="a-74822108">从控件得到选定的Item</h2>
<p>假设在控件列表中已经选定某项，现在要得到被选定项的内容，首先要得到该项的位置，然后得到对应位置的内容。这里会用到两个函数，如：</p>
<p>int nIndex=m_combo.GetCurSel();</p>
<p>CString strText;</p>
<p>m_combo.GetLBText(nIndex，strText);</p>
<p>这样，得到的内容就保存在strText中。若要选取当前内容，可调用函数GetWindowText(strText)。</p>
<h2 id="a-9e82dcf1">在控件中查找给定Item</h2>
<p>这种操作一般用于在程序中动态修改控件中该项的值，可以用函数FindStringExact()精确匹配，如：</p>
<p>int nIndex=m_combo.FindStringExact(nStartAfter，“value to befound”);</p>
<p>nStartAfter指明从哪一行开始查找。如果查找成功，返回的是该项的位置；否则，返回CB_ERR。</p>
<p>也可以选中包含指定字符串的项，如：</p>
<p>int nIndex=m_combo.SelectString(nStartAfter，“value to beselected”);</p>
<h2 id="a-4ff2c1d6">删除控件中的Item</h2>
<p>该操作可以利用函数DeleteString()，需要指定被删除项的位置，如：</p>
<p>m_combo.DeleteString(nIndex);</p>
<p>也可以使用函数ResetContent()，清除目前的所有项，如：</p>
<p>m_combo.ResetContent();</p>
<h2 id="a-bdce611c">显示控件中的某项</h2>
<p>int nIndex=m_combo.GetCurSel();//当前选中的项</p>
<p>m_combo.SetCurSel(nIndex);//设置第nIndex项为显示的内容</p>
<h2 id="a-ebb53b95">取得ComboBox框内容</h2>
<p>1）取当前内容</p>
<p>m_combo.GetWindowText(strTemp);</p>
<p>2）取其他行内容</p>
<p>m_combo.GetLBText(n，strTemp);</p>
<h2 id="a-c6c0235f">获得焦点</h2>
<p>通常要判断控件是否获得了焦点，可以用GetFocus()函数，例如：</p>
<p>if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。</p>
<p>但是combobox的焦点不同，因为它是由edit和listbox两部分组成，所以获得焦点要用GetParent()，例如：</p>
<p>if((GetFocus()-&gt;GetParent())==GetDlgItem(IDC_COMBO_CF))。</p>
<h2 id="a-ccae02c4">设置控件属性</h2>
<p>1）Sort属性：设置为true，则新添加项将按字母顺序插入到列表中；否则，在列表的结尾处插入项。</p>
<p>2）Type属性：设置为Drop List，则使ComboBox不能输入只能在下拉菜单中选择；设置Dropdown，则ComboBox中允许输入内容。</p>
<p>3）No integral height属性，表示最大长度为设计长度，如果实际内容比设计长度多，就出现滚动条，少就以实际长度显示。</p>
<p>得到或设置输入框中被选中的字符位置</p>
<p>1）DWORD GetEditSel()/BOOL SetEditSel(int nStartChar，int nEndChar);//得到或设置输入框中被选中的字符位置。</p>
<p>2）BOOL LimitText(int nMaxChars);//设置输入框中可输入的最大字符数。</p>
<h2 id="a-daf1f3f6">常用的消息映射宏</h2>
<p>ON_CBN_DBLCLK 鼠标双击</p>
<p>ON_CBN_DROPDOWN 列表框被弹出</p>
<p>ON_CBN_KILLFOCUS/ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生</p>
<p>ON_CBN_SELCHANGE 列表框中选择的行发生改变</p>
<p>ON_CBN_EDITUPDATE 输入框中内容被更新</p>
<p>使用以上几种消息映射的方法为定义原型如：afx_msg void memberFxn();的函数，并且定义形式如ON_Notification(id，memberFxn)的消息映射。如果在对话框中使用组合框，Class Wizard会自动列出相关的消息，并能自动产生消息映射代码。</p>
<h1>.NET</h1>
<p>在.NET的Server Control中只有DropDownList，而不像Win Form编程一样有ComboBox，但是AjaxControlToolkit中提供了ComboBox，可以提供文本输入功能，并且有SuggestAppend功能。</p>
<p>与Textbox不同的是，ComboBox.Text属性并不能取得文本框中的文本，此属性与ComboBox.SelectedValue完全等同，只能获得下拉列表中的Value。如果想获得ComboBox文本框中的文本，只能通过ComboBox.Controls属性来读取。</p>
<p>((TextBox)((Table)ComboBoxComponent.Controls).Rows.Cells.Controls).Text</p>
<p>这就是ComboBox中自己输入的文本。</p>
<p>循环初始化ComboBox的例子：</p>
<p>private void initComboBox()</p>
<p>{</p>
<p>for(int i=0;i&lt;24;i++)</p>
<p>{</p>
<p>comboHour.Items.Add(i.ToString());</p>
<p>comboHour.SelectedIndex=0;//设置第一个被选中</p>
<p>}</p>
<p>}</p>
<h1>VFP控件</h1>
<h2 id="a-7543e0d4">组合框(combobox)</h2>
<p>组合框和列表框的功能类似，但使用更为灵活,更为常用。实际上，组合框是由一个文本框和一个列表框组成的，组合框又被称为弹出式菜单。用户使用时，单击文本框右侧的三角即可展开下拉列表。</p>
<h2 id="a-659fc3b4">组合框常用的属性</h2>
<p>属性 作用</p>
<p>rowsource 组合框内容从何处来(来源)</p>
<p>rowsourcetype 组合框内容来源的类型，详见注1</p>
<p>displayvalue 选择值</p>
<p>boundcolumn 在组合框包含多项时指定哪一列作为value属性的值</p>
<p>columncount 行源列数</p>
<p>list(i) 第i行的值</p>
<p>selected(i) 第i行是否被选中</p>
<p>multiselect 是否可以同时选取多项</p>
<p>moverbars 项目是否可以移动</p>
<p>sorted 当rowsourcetype为0和1时，组合框内容是否按字母大小排序</p>
<p>listindex 组合框中当前被选定项的索引值</p>
<p>integralheight 组合框的高度是否可自动调整</p>
<p>listcount 组合框中数据项的数目</p>
<p>style 指定组合框的类型.参数如下:0-下拉组合框，也可在文本框中直接输入 2-下拉列表框，只能在展开的下拉列表中选择</p>
<p>incrementalsearch 确定在键盘操作时是否支持增量搜索值为T，当用键盘选择列表项，用户敲一个键,系统将自动定位到与输入字母相应的项前</p>
<p>注1(rowsourcetype属性可指定的值):</p>
<p>0-无，运行时使用列表框的确良additem和addlistitem方法加入</p>
<p>1-值，将列表框的内容在设计时直接写在该属性中</p>
<p>2-表别名:由columncount确定表中选择的字段.当用户选择列表框时，记录指针将自动移到该记录上</p>
<p>3-sql语句:见sql部分，由执行的结果产生.</p>
<p>4-查询文件名:见查询部分，由查询结果产生</p>
<p>5-数组名</p>
<p>6-字段名表:可用表别名作为字段前缀.当用户选择列表项时，记录指针将自动移到该记录上</p>
<p>7-文件名描述框架，可包含&quot;*&quot;和&quot;?&quot;来描述在列表框中显示的文件名</p>
<p>8-结构</p>
<p>9-弹出式菜单，提供向后兼容.</p>
<h2 id="a-73f1b6a7">组合框常用的方法</h2>
<p>方法 作用</p>
<p>additem 增加列表项</p>
<p>removeitem 移去列表项</p>
<p>clear 移去所有列表项</p>
<p>requery 当rowsourcetype为3和4时，根据rowsource中的最新数据重新刷新列表项</p>
<h2 id="a-a540ced2">组合框常用事件</h2>
<p>列表框的常用事件为click(单击)事件、dbclick(双击)事件和interactivechange事件(当用户使用键盘或鼠标更改组合框的值时发生的事件，比如，我们单击组合框右侧的三角展开下拉列表时，即会发生此事件)。</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/193849.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
