MFC中,怎么获取ComboBox的选中项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中,怎么获取ComboBox的选中项相关的知识,希望对你有一定的参考价值。

int no = m_BaudRate.InsertString(0,_T("9600")); //波特率
m_BaudRate.SetItemData(B9600,(DWORD_PTR)&no);
no = m_BaudRate.InsertString(1,_T("19200"));
m_BaudRate.SetItemData(B19200,(DWORD_PTR)&no);
m_BaudRate.SetCurSel(0);
用int baud = m_BaudRate.GetCurSel();获取的是ComboBox选中项的下标,即0或1,我想获取到我定义的B9600或B19200,要怎么获取啊?还请高手指点一二~

也就是说这个9600是一个中间值,你选择的是第0项,而显示的是9600,而你要取的值却是b9600。如果是这的话我建议你使用map键值,使用9600做为键,B9600做为做,在你要获取B9600的时候,可以选获取选择的文本getwindowtext(),然后将文本转int型,再find函数查找int型,最后获取查找到的值。

MFC(MicrosoftFoundationClasses),同VCL类似,是一种ApplicationFramework,随微软Visual C++开发工具发布。MFC以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。 其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

参考技术A 用m_BaudRate.GetItemData(xxx);//xxx就是你要获得的第几个Item里的Data了。。
你这里好像用法不太对。。。SetItemData参数列表第一个参数应该是item的编号,后面那个才是数据,你定义的B9600或B19200应该存在参数列表的第二个变量里。。。。。
最好是说下你往这里放数据是为了做什么。。。
参考技术B CString text;
GetDlgItemText(IDC_COMBO1,text);

IDC_COMBO1是ComboBox控件的ID。获取的文本保存在text变量里。
参考技术C GetLBText( index )

记得采纳追问

具体要怎么用,能讲详细点儿吗?
GetLBText()有两个参数:nIndex和lpszText
nIndex代表选中项的下标,可用 int baud = m_BaudRate.GetCurSel(); 获取
lpszText指向是接收该字符串的缓冲区,把取出来的选择项放在里面
我理解的对吗?
那么,取出来的选择项,到底是我在ComboBox中显示的9600或19200,还是我想要的 B9600 或 B19200 呢?

追答

CString temp

m_combox.GetLBText( index, temp);

应该就这样了.

追问

对不起,是我之前写错了,
GetLBText 我刚刚试了一下,获取的是ComboBox中显示的9600或19200。

我想做个索引,但是SetItemData用错了,可能是这个把你弄糊涂了

把之前的 SetItemData 改成 SelectString ,我要获取这个 B9600 ,高手帮我想想好不~
int no = m_BaudRate.InsertString(0,_T("9600")); //波特率
m_BaudRate.SelectString(B9600,(LPCTSTR)&no);
m_BaudRate.SetCurSel(0);

参考技术D 你是想获取定义的B9600或B19200在combobox中所在的下标位置 吗?追问

比如:我选中了ComboBox的第0个项,即选中页面中显示出的“9600”
我希望在程序中,获取,该选择项(即“9600”)对应的----B9600;
#define B9600 0x0C
#define B19200 0x0D
然后,将获取的 B9600 放入sio_ioctl(int port, int baud, int mode); 中 的int baud。
所以,我需要获取的是 B9600 或 B19200,麻烦大家啦~

追答

也就是说这个9600是一个中间值,你选择的是第0项,而显示的是9600,而你要取的值却是b9600。如果是这的话我建议你使用map键值,使用9600做为键,B9600做为做,在你要获取B9600的时候,可以选获取选择的文本getwindowtext(),然后将文本转int型,再find函数查找int型,最后获取查找到的值。

c#如何获取comboBox当前选中的值

我更改 comboBox1选项框的值后,但是comboBox1.SelectedItem.ToString();的值并没有更改,一直都是语文,不及格名单后面的输出就是名字和选项框的值,我已经改成 “数学” 了,输出的还是 “语文”;

1、新建winform项目用于测试comboBox。

2、新建完成的项目结构。

3、在Form1窗体中添加一个comboBox,编译。

4、点击comboBox,右键选择属性,找到【items】项,在弹出的【字符串集合编辑器】中输入模拟项1到10。

5、加入模拟值后的运行效果如下,下拉显示了所有的10个项,没有滚动条。

6、再次找到comboBox,设置如下两项:IntegralHeight:false;MaxLength:3。

参考技术A 1.添加combobox后做如下设置

2.根据自己的需要在类中重写如下方法

// ==========================================================
// Combo box data source methods
// ==========================================================
- (NSInteger) numberOfItemsInComboBox: (NSComboBox *) aComboBox
#pragma unused (aComboBox)
return ([dataSource count]);

- (id) comboBox: (NSComboBox *) aComboBox objectValueForItemAtIndex: (NSInteger) index
#pragma unused (aComboBox)
return [dataSource objectAtIndex:index];

- (NSUInteger) comboBox: (NSComboBox *) aComboBox indexOfItemWithStringValue: (NSString *) string
#pragma unused (aComboBox)
return [dataSource indexOfObject:string];


- (NSString *) firstGenreMatchingPrefix: (NSString *) prefix
NSString *string = nil;
NSString *lowercasePrefix = [prefix lowercaseString];
NSEnumerator *stringEnum = [dataSource objectEnumerator];

while ( string = [stringEnum nextObject] )
if ([[string lowercaseString] hasPrefix:lowercasePrefix] )
return (string) ;


return (nil);
// firstGenreMatchingPrefix

- (NSString *) comboBox: (NSComboBox *) aComboBox completedString: (NSString *) inputString
#pragma unused (aComboBox)
// This method is received after each character typed by the user, because we have checked the "completes" flag for
// genreComboBox in IB.
// Given the inputString the user has typed, see if we can find a genre with the prefix, and return it as the suggested complete
// string.
NSString *candidate = [self firstGenreMatchingPrefix:inputString];
return (candidate ? candidate : inputString);

这些方法实现combobox在选择选项、自动完成时的处理方式。其中dataSource为NSArray。
3.设置combobox的datasource为实现上述方法的对象即可。
参考技术B 您要注意的是,你是“输入”的 数学,并非“选择”了 数学
正确代码:xx = comboBox1.Text;追问

这是comboBox1多选框,下拉有语文,数学,英语3项,不是选择了数学吗?

我改成comboBox1.Text;也还是不行

追答

不会吧,我这里测试没问题啊!!!

追问

有更换过里面的内容吗?我第一个是没问题,换了一个里面的值不会更新

追答

试了,两种方法都可以!

comboBox1.Text;

comboBox1.SelectedItem.ToString();

本回答被提问者采纳
参考技术C onSelect:function(rec)varval=$('#cc1').combobox('getValues').join(',');$('#OperationID').val(val);这样可以多选,用一个文本框解决后台取值问题,后台直接取值的话,跟你一样问题 参考技术D DataRowView drv = (DataRowView)comboBox1.SelectedItem;
string Id = drv.Row["id"].ToString();

以上是关于MFC中,怎么获取ComboBox的选中项的主要内容,如果未能解决你的问题,请参考以下文章

WinForm中ComboBox添加Key/Value项获取选中项根据KeyValue设置选中项总结

MFC 获取Combo Box控件 当前选定项的序号和文本内容

c#如何获取comboBox当前选中的值

C#,comboBox ,怎么使某一项不能被选中

MFC C++ CListBox 获取选中项

c#(winform)combobox手动添加的选项怎么获取value?