从组合框中的 DWORD_PTR 检索项目值?

Posted

技术标签:

【中文标题】从组合框中的 DWORD_PTR 检索项目值?【英文标题】:Retrieve item value from DWORD_PTR in combobox? 【发布时间】:2019-09-05 14:21:11 【问题描述】:

我想检索项目值(字符串) s 在哪里是

DWORD_PTR s = m_laybox.GetItemData(idx);

基本上,s 被选中,我保存在配置中 现在如何从 s 获取项目值(字符串)

【问题讨论】:

您需要向我们展示您调用 m_laybox.SetItemData() 的代码。我们需要知道作为商品数据存储的数据类型。 【参考方案1】:

嗯,有多种策略。您必须知道的一件事是数据必须在组合框的生命周期内(或多或少)存在。您不必在组合框中输入字符串。可以,但也可以将对象指针放入组合框中(作为项目数据)。

我喜欢做事的一种方法是拥有一组项目,然后将索引存储到组合框中。

但是,考虑到您将“字符串”放入组合框中....

你做这样的事情:

说 pString 是 TCHAR*(或 char* 或 wchar_t*)

// for all the items you need to add ....
int idx = m_combo.AddString(pString); // or something different
m_combo.SetItemDataPtr(idx, pString);

后记,响应 CBN_SELENDOK 或 CBN_SELCHANGE,您要获取数据...

您将获得一个 idx ....

TCHAR* pRetrieved = reinterpret_cast<TCHAR*>(m_combo.GetItemDataPtr(idx);

CComboBox::GetItemDataPtr() 返回一个 LPVOID。您需要将其转换为您想要的类型。

对于差异示例,请考虑此记录...

struct ClientInfo

   CString m_Name;
   int m_CliendID;
   CString m_Address;
;

考虑一下,也许你有一个包含这些记录的数组:

CArray<ClientInfo> m_arrayClientInfo;

稍后你初始化它。然后你想在对话框中填充组合框。你可以这样做:

for (int i = 0; i < m_arrayClientInfo.GetCount(); ++i)

   int idx = m_combo.AddString(m_arrayClientInfo[i].m_Name);
   m_combo.SetItemDataPtr(idx, i); // store index, not pointer, but you could store pointer

程序稍后的某个时间,当您想要获取数据时...

int nArrayIndex = reinterpret_cast<int>(m_combo.GetItemDataPtr(idx));
const ClientInfo& clientInfo = m_arrayClientInfo[nArrayIndex];

这些是基础......不保证任何东西都能编译或工作......但它很接近

【讨论】:

以上是关于从组合框中的 DWORD_PTR 检索项目值?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 ext.net 网格面板内的组合框中检索和设置值

无法从组合框中检索数据。

从组合框中选择项目时,如何从数据库中获取 ID 值?

从访问 vba 中的多值组合框中获取值

从 onclick 事件访问组合框中的选定值

在 access 2007 中更新组合框值