公开CGridCellCombo类的当前组合选择索引

时间:2017-01-23 09:42:05

标签: mfc cgridctrl

几年来,我一直在使用CGridCellCombo课程。它旨在与CGridCtrl一起使用。

几年前,我确实在评论部分提出enhancement的请求,但我没有得到回复。

CGridCellCombo的基本概念是它适用于单元格的文本值。因此,当您显示下拉列表时,它将选择该值。在正常情况下这很好。

但我有一些地方,我使用组合作为下拉列表。在某些情况下,继续使用文本值作为中间人是完全正确的。

但在某些情况下,了解组合的实际选定索引是理想的。当我有一个droplist并且它被翻译成30种语言,并且我需要知道索引时,我别无选择,只能为该转换加载可能的选项,然后检查单元格值并根据数组中找到的值I知道指数。

它有效,但不是很优雅。我花了一些时间来尝试通过向CInPlaceList添加变量并设置它来跟踪所选索引。然后我向CGridCellCombo添加了一个包装器方法以返回该值。但它没有用。

我想知道这里是否有人对CGridCellCombo课程有很好的理解,并且可能会告诉我揭露CComboCell::GetCurSel的价值。

我知道CGridCtrl已经很老了,但我没有为MFC设计另一个灵活的网格控件。

2 个答案:

答案 0 :(得分:1)

CGridCtrl中选择了传回CInPlaceList::EndEdit的值。使用内部消息GVN_ENDLABELEDIT,此消息始终使用文本将其设置为网格。

此值通过控件中的GetWindowText获取。随意覆盖此行为。

处理程序CGridCtrl::OnEndInPlaceEdit再次调用OnEndEditCell。全部从GVN_ENDLABELEDIT发送字符串。

当您想要在内部值和所选值之间做出改变时,您必须通过重写绘图并选择来管理它。网格中的值是GetCurSel值,您必须显示不同的内容......在当前要更改的代码中没有太多处理。

更多信息

关键是CInPlaceList::EndEdit()。有人致电GetWindowTextCInPlaceList来自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;
}