【问题标题】:How can I get the value (string) of the current selection in a combobox?如何在组合框中获取当前选择的值(字符串)?
【发布时间】:2010-10-03 15:13:28
【问题描述】:

如何获取组合框中当前选择的值(字符串)?

(不是整数索引)

【问题讨论】:

    标签: visual-c++ mfc visual-c++-6


    【解决方案1】:

    可能有更好的方法(我的 MFC 有点生锈),但您似乎应该能够调用 CComboBox::GetLBText(),并使用 CComboBox::GetCurSel() 将当前选择传递给它。

    【讨论】:

    • 您可能会说“嗯”,因为您试图在 CBN_SELCHANGE 处理程序中查看新值。这是在提交更改之前/之前/触发的,但此时 GetLBText 确实已经具有访问权限..
    【解决方案2】:

    一个普通的旧 GetWindowText 也可以工作。

    编辑:正如 ajryan 指出的那样,GetWindowText 实际上CBN_SELCHANGE 处理程序中工作,因为新选择已生效,但窗口文本发送WM_COMMAND 时,尚未使用新选择的文本进行更新。

    【讨论】:

    • 嗯。看起来你是对的。我想我以前从未尝试过。有点令人惊讶,因为在提交更改之前通常会有一个“更改”通知,而在提交更改之前通常会有一个“更改”通知,但组合框似乎并非如此。
    【解决方案3】:

    使用 GetLBText,传入索引和一个 CString 对象。

    编辑:太慢了!

    【讨论】:

      【解决方案4】:

      CB_GETCURSEL 返回整数索引 CB_GETLBTEXTCB_GETCURSEL 返回字符串

      【讨论】:

        【解决方案5】:
        char buffer[MAX_COMBO_STRING_LENGTH];
        
        int index= static_cast<int>(SendDlgItemMessage(hDlg, ID_COMBO_BOX, CB_GETCURSEL, 0, 0));
        SendDlgItemMessage(hDlg, ID_COMBO_BOX, CB_GETLBTEXT, index, (LPARAM)(LPCTSTR)buffer);
        
        //buffer contains the selected text unless CB_GETCURSEL returned CB_ERR (-1) to the index
        

        【讨论】:

          【解决方案6】:

          有几种方法可以解决这个问题。


          映射到变量

          当您使用组合时,您可以将其映射到变量。

          • 如果您的组合是下拉列表,它会映射到int
          • 如果您的组合是下拉菜单,它会将其映射到CString

          直接访问

          正如其他人所说,当您的组合是 下拉 时,您可以将其视为具有两个控件(列表和编辑)。使用GetWindowText 来访问编辑控件文本。


          使用宏

          您可以使用许多helper macros。还有一个用于获取文本(ComboBox_GetText 宏)。无需将控件映射到变量。

          这真的取决于您对组合控件的需求和使用情况。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多