【问题标题】:MFC C++ CListBox get selected itemMFC C++ CListBox 获取选中项
【发布时间】:2016-05-20 16:37:59
【问题描述】:

首先让我说我这几天一直在寻找解决方案......

我正在尝试获取 ListBox 的选定项。这是我的代码:

CListBox * pList1 = (CListBox *)GetDlgItem(IDC_LIST1);
CString ItemSelected;
// Get the name of the item selected in the Sample Tables list box 
// and store it in the CString variable declared above 
pList1->GetText(pList1->GetCurSel(), ItemSelected);
MessageBox(ItemSelected, "TEST", MB_OK);

现在,当我尝试此操作时,我收到一条错误消息,提示“参数不正确”

【问题讨论】:

  • pList1->GetCurSel() 不能保证成功(列表框可以完全没有选择)。在这种情况下,它返回 LB_ERR。这不是传递给CListBox::GetText 的有效索引。
  • 但是有一个选择......还有其他方法吗?
  • 先尝试完整编译。然后尝试调试它。此外,为了进行测试,请将 GetCurSel 值分配给一个变量,以便您确认。最后,您为什么不直接将CListBox 映射到CString 变量而只是调用UpdateData(TRUE) 并使用变量值?
  • 你的ClistBox是单选还是多选?

标签: c++ mfc


【解决方案1】:

除了错误处理之外,您的代码看起来还不错。 MessageBox 参数看起来也不正确。第一个参数应该是HWND 类型。我相信这是你问题的根本原因。请改用 MFC 标准 AfxMessageBox

CListBox * pList1 = (CListBox *)GetDlgItem(IDC_LIST1);

int nSel = pList1->GetCurSel();
if (nSel != LB_ERR)
{
    CString ItemSelected; 
    pList1->GetText(nSel, ItemSelected);
    AfxMessageBox(ItemSelected);
}

【讨论】:

  • 啊,是的,MessageBox 需要HWND 参数。尽管如此,调试代码应该隔离他的问题以及触发错误的行。
【解决方案2】:

如果 CListBox 处于单选模式,CListBox::GetCurSel 将返回选定的索引。

如果 CListBox 处于多选模式,则应使用 CListBox::GetSelItems 它将返回索引列表。

你不能混搭功能。

并且总是检查返回码(正如其他人已经写的那样)。

【讨论】:

    【解决方案3】:

    如果你已经有一个数据成员 MyList(of classCListBox):

    int nSel = MyList.GetCurSel();
        CString ItemSelected;
        if (nSel != LB_ERR)
        {
            MyList.GetText(nSel, ItemSelected);
        }
    

    【讨论】:

      【解决方案4】:

      CWnd class has a MessageBox 不需要 HWND 参数的函数。但是,是的,AfxMessageBox 更易于使用,并且可以在 MFC 代码中的任何位置调用,而无需 CWnd 派生对象。另外注意:如果在 MFC 代码中调用 WinAPI 函数(此处不需要,但在其他情况下可能),最好在其前面加上范围解析运算符,以便避免任何混淆、错误和/或名称冲突(例如 ::MessageBox...)。

      OP 代码中“无效参数”错误的一个可能原因是它在 UNICODE 构建配置中使用了 ANSI 字符串文字(“TEST”)。在这种情况下,必须使用 UNICODE 字符串文字 (L"TEST") 或更好一点,使用 _T 宏 (_T("TEST")) 可以在 ANSI 和 UNICODE 中构建配置。

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多