CComboBox排序
CComboBox Sorting
所以我正在尝试在现有应用程序上削减我的 CPP 牙齿。
我 运行 遇到了一些麻烦。我的组合框项目正在按顺序添加,如下所示。但是,输出是
[1,10,11,12,13,14,15,2,3,4,5,6,7,8,9]
我看过 CComboBox documentation here。然而,我仍然对为什么会产生这种结果感到困惑。
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
在组合框的属性 window 中,确保将设置设置为 False。这将允许您的组合框以您输入的方式显示数据。
*这是我在Visual Studio中所做的,我没看到你在哪里说的IDE你用的是什么。
问题在于您的组合框使用的是 CBS_SORT
样式,因此数据是使用 ASCII 整理顺序排序的。
要关闭排序,您必须从组合框中删除 CBS_SORT
样式。根据您使用的资源工具,可以通过检查工具中的某些项目以打开 on/off 排序来删除此样式,或者直接转到资源文件本身并删除 CBS_SORT
样式来自组合框定义。
所以我正在尝试在现有应用程序上削减我的 CPP 牙齿。
我 运行 遇到了一些麻烦。我的组合框项目正在按顺序添加,如下所示。但是,输出是
[1,10,11,12,13,14,15,2,3,4,5,6,7,8,9]
我看过 CComboBox documentation here。然而,我仍然对为什么会产生这种结果感到困惑。
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
在组合框的属性 window 中,确保将设置设置为 False。这将允许您的组合框以您输入的方式显示数据。
*这是我在Visual Studio中所做的,我没看到你在哪里说的IDE你用的是什么。
问题在于您的组合框使用的是 CBS_SORT
样式,因此数据是使用 ASCII 整理顺序排序的。
要关闭排序,您必须从组合框中删除 CBS_SORT
样式。根据您使用的资源工具,可以通过检查工具中的某些项目以打开 on/off 排序来删除此样式,或者直接转到资源文件本身并删除 CBS_SORT
样式来自组合框定义。