几年来,我一直在使用CGridCellCombo课程。它旨在与CGridCtrl一起使用。
几年前,我确实在评论部分提出enhancement的请求,但我没有得到回复。
CGridCellCombo
的基本概念是它适用于单元格的文本值。因此,当您显示下拉列表时,它将选择该值。在正常情况下这很好。
但我有一些地方,我使用组合作为下拉列表。在某些情况下,继续使用文本值作为中间人是完全正确的。
但在某些情况下,了解组合的实际选定索引是理想的。当我有一个droplist并且它被翻译成30种语言,并且我需要知道索引时,我别无选择,只能为该转换加载可能的选项,然后检查单元格值并根据数组中找到的值I知道指数。
它有效,但不是很优雅。我花了一些时间来尝试通过向CInPlaceList
添加变量并设置它来跟踪所选索引。然后我向CGridCellCombo
添加了一个包装器方法以返回该值。但它没有用。
我想知道这里是否有人对CGridCellCombo
课程有很好的理解,并且可能会告诉我揭露CComboCell::GetCurSel
的价值。
我知道CGridCtrl
已经很老了,但我没有为MFC设计另一个灵活的网格控件。
答案 0 :(得分:1)
CGridCtrl
中选择了传回CInPlaceList::EndEdit
的值。使用内部消息GVN_ENDLABELEDIT
,此消息始终使用文本将其设置为网格。
此值通过控件中的GetWindowText
获取。随意覆盖此行为。
处理程序CGridCtrl::OnEndInPlaceEdit
再次调用OnEndEditCell
。全部从GVN_ENDLABELEDIT
发送字符串。
当您想要在内部值和所选值之间做出改变时,您必须通过重写绘图并选择来管理它。网格中的值是GetCurSel
值,您必须显示不同的内容......在当前要更改的代码中没有太多处理。
关键是CInPlaceList::EndEdit()
。有人致电GetWindowText
(CInPlaceList
来自CComboBox
),只需在此处获取索引即可。同样在CGridCellCombo::EndEdit
中,您可以访问m_pEditWnd
,即CInPlaceList
对象,并从CComboBox
派生,因此您也可以访问此处。
答案 1 :(得分:0)
我发现这是最简单的解决方案:
int CGridCellCombo::GetSelectedIndex()
{
int iSelectedIndex = CB_ERR;
CString strText = GetText();
for (int iOption = 0; iOption < m_Strings.GetSize(); iOption++)
{
if (strText.CollateNoCase(m_Strings[iOption]) == 0) // Match
{
iSelectedIndex = iOption;
break;
}
}
return iSelectedIndex;
}