CComboBox Sorting

CComboBox Sorting

本文关键字:Sorting CComboBox      更新时间:2023-10-16

所以我试图在现有的应用程序上减少我的CPP牙齿。

我遇到了一点小麻烦。我的组合框项目正在按顺序添加,如下所示。但是,输出是

[1,10,11,12,13,14,15,2,3,4,5,6,7,8,9]

我已经在这里查看了CComboBox文档。然而,我仍然很困惑,为什么这会产生这样的结果。

for (int i = 1; i <= m_pPage2->GetNumberColumns(); i++)
{
    CString szColNum;
    szColNum.Format (_T("%d"), i);
    m_cSubColumn.AddString(szColNum);
}

标准比较函数不能很好地处理包含数字的字符串。他们没有考虑到字符串的大小也应该发挥作用。既然"10"以"1"开头,那么它就会出现在索引0处大于"1"的任何内容之前。

如果你用前导零填充你的所有数字,使字符串大小相同,它将按正常的数字顺序排序。

当您使用AddString()时,要阻止CComboBox对其内容进行排序,您需要将CBS_SORT属性设置为false

问题是您的组合框使用CBS_SORT样式,因此使用ASCII排序序列对数据进行排序。

要关闭排序,您必须从组合框中删除CBS_SORT样式。根据您使用的资源工具,可以通过检查工具中的某些项来打开/关闭排序来删除此样式,或者直接到资源文件本身并从组合框定义中删除CBS_SORT样式。

在组合框的属性窗口中,确保set设置为False。这将允许组合框按照输入的方式显示数据。

*这是我在Visual Studio中做的,我没有看到你在哪里说你使用的是什么IDE。