mfc如何获取combobox按钮下拉框中当前选中的字符串
时间: 2024-01-27 08:06:27 浏览: 31
在 MFC 中,获取 ComboBox 控件中当前选中的字符串有多种方法。以下是其中的一种方法:
1. 首先获取 ComboBox 控件对象,假设该对象名为 m_ComboBox。
2. 调用 GetCurSel() 函数获取当前选中项的索引,将其保存在一个变量中,假设该变量名为 selIndex。
3. 调用 GetLBText() 函数获取当前选中项的字符串,将其保存在一个 CString 对象中,假设该对象名为 selString。
代码如下:
```
// 声明变量
int selIndex;
CString selString;
// 获取当前选中项的索引
selIndex = m_ComboBox.GetCurSel();
// 获取当前选中项的字符串
m_ComboBox.GetLBText(selIndex, selString);
```
注意:在使用 GetCurSel() 函数时,应先判断 ComboBox 控件中是否有选中项,如果没有选中项,则 GetCurSel() 函数返回值为 CB_ERR。可以参考下面的代码:
```
// 声明变量
int selIndex;
CString selString;
// 获取当前选中项的索引
selIndex = m_ComboBox.GetCurSel();
// 判断是否有选中项
if (selIndex != CB_ERR) {
// 获取当前选中项的字符串
m_ComboBox.GetLBText(selIndex, selString);
}
```
相关问题
C# 将ListBox控件嵌入到ComboBox的下拉框中,覆盖combobox下拉框
在 C# 中将 ListBox 控件嵌入到 ComboBox 的下拉框中,可以通过以下步骤实现覆盖 ComboBox 下拉框:
1. 将 ComboBox 控件的 DrawMode 属性设置为 OwnerDrawFixed。
2. 在 ComboBox 控件的 DropDown 事件中添加以下代码:
```
private void comboBox1_DropDown(object sender, EventArgs e)
{
// 创建 ListBox 控件
ListBox listBox = new ListBox();
// 设置 ListBox 控件的属性
listBox.Items.Add("Item 1");
listBox.Items.Add("Item 2");
listBox.Items.Add("Item 3");
listBox.Dock = DockStyle.Fill;
// 将 ListBox 控件添加到 ComboBox 的下拉框中
comboBox1.Controls.Add(listBox);
}
```
3. 在 ComboBox 控件的 DrawItem 事件中添加以下代码:
```
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// 只处理 ComboBox 的下拉框中的项
if (e.Index < 0)
{
return;
}
// 获取 ComboBox 的 Graphics 对象
Graphics g = e.Graphics;
// 获取 ComboBox 的绘制区域
Rectangle bounds = e.Bounds;
// 如果当前项被选中,则绘制背景颜色
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
g.FillRectangle(Brushes.LightBlue, bounds);
}
else
{
g.FillRectangle(Brushes.White, bounds);
}
// 获取当前项的文本
string text = comboBox1.Items[e.Index].ToString();
// 设置字体和颜色
Font font = new Font(comboBox1.Font, FontStyle.Regular);
Color color = Color.Black;
// 绘制文本
g.DrawString(text, font, new SolidBrush(color), bounds.X, bounds.Y);
// 如果当前项被选中,则绘制 ListBox 控件
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
// 获取 ListBox 控件
ListBox listBox = (ListBox)comboBox1.Controls[0];
// 绘制 ListBox 控件
listBox.Location = new Point(bounds.X, bounds.Y + bounds.Height);
listBox.Visible = true;
}
else
{
// 隐藏 ListBox 控件
ListBox listBox = (ListBox)comboBox1.Controls[0];
listBox.Visible = false;
}
}
```
这样,当用户点击 ComboBox 的下拉框时,就会显示一个覆盖 ComboBox 下拉框的 ListBox 控件,用户可以通过 ListBox 控件来选择项。
MFC里如何实现 ComboBox 按钮在下拉时只显示指定字符串内容
要实现ComboBox按钮在下拉时只显示指定字符串内容,可以通过以下步骤实现:
1. 在MFC窗口类的OnInitDialog()函数中,添加ComboBox控件,并设置ComboBox的样式为CBS_DROPDOWNLIST,这将使ComboBox只能从下拉列表中选择已定义的值。
2. 在OnInitDialog()函数中,使用AddString()函数向ComboBox中添加所有可选项的字符串。
3. 在ComboBox下拉事件OnCbnDropdown()中,遍历ComboBox中所有的项,如果该项的字符串不在指定字符串列表中,就使用DeleteString()函数删除该项。
以下是示例代码:
```
// 在窗口类的头文件中定义指定字符串数组
CStringArray m_arrStrings;
// 在OnInitDialog()函数中添加ComboBox控件
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBOBOX);
pComboBox->ModifyStyle(0, CBS_DROPDOWNLIST);
// 向ComboBox中添加所有可选项的字符串
pComboBox->AddString(_T("Option 1"));
pComboBox->AddString(_T("Option 2"));
pComboBox->AddString(_T("Option 3"));
// 在ComboBox下拉事件OnCbnDropdown()中过滤不需要的项
void CMyDialog::OnCbnDropdownCombo()
{
CComboBox* pComboBox = (CComboBox*)GetDlgItem(IDC_COMBOBOX);
int nCount = pComboBox->GetCount();
for (int i = nCount - 1; i >= 0; i--)
{
CString strText;
pComboBox->GetLBText(i, strText);
if (m_arrStrings.Find(strText) == -1)
{
pComboBox->DeleteString(i);
}
}
}
```
在上述示例代码中,OnCbnDropdownCombo()函数中的m_arrStrings是指定的字符串数组。在ComboBox下拉事件中,遍历ComboBox中的所有项,如果该项的字符串不在指定字符串列表中,就使用DeleteString()函数删除该项。这样ComboBox就只会显示指定字符串列表中的内容。