【问题标题】:CComboBox SortingCComboBox 排序
【发布时间】:2015-05-18 16:20:55
【问题描述】:

所以我正在尝试在现有应用程序上削减我的 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);
}

【问题讨论】:

  • 仔细查看这些数字。它们使用 ASCII 整理顺序排序,而不是数字。如果组合框已排序,则按 ASCII 排序,而不是数字。
  • 不,我确定它正在排序。我不知道为什么@PaulMcKenzie
  • 你必须从组合框样式中去掉(我认为它叫这个)CBS_SORT 标志。然后随着你的前进,数字会被添加。

标签: c++ mfc ccombobox


【解决方案1】:

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

如果您用前导零填充所有数字,以便字符串大小相同,它将按正常的数字顺序对其进行排序。

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

【讨论】:

  • 那么是否有要设置的属性或告诉它忽略它的内部比较引擎的东西?我已经按顺序添加它们。我不确定如何解决这个问题。
  • @AnthonyRussell CBS_SORT 需要设置为 false。
  • 我给了您支票,但您能否将 CBS_Sort 添加到您的答案中。谢谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 解决方法是复杂的打开一个设计器。需要在资源文件中进行。谢谢!
    • @AnthonyRussell 在这种情况下,如果您在资源文件中,只需查找您的组合框并删除 CBS_SORT。祝你好运
    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多