【问题标题】:Is it possible to add listboxitems from bottom in a listbox in Delphi XE7?是否可以在 Delphi XE7 的列表框中从底部添加列表框项?
【发布时间】:2015-03-22 12:48:03
【问题描述】:

我想从底部添加列表框项目,当我添加更多时,第一个在列表框中向上滚动。所以这与通常将项目添加到列表框相反。

有人知道怎么做吗?

【问题讨论】:

  • 如果我理解正确,您想要的只是将自动滚动添加到列表框,以便最后一项始终可见?如果在添加最后一项后是这样,只需选择它即可。这应该向下滚动视图。
  • @SilverWarior 不,它与自动滚动无关。我想知道如何从下往上添加项目,而不是从上往下。
  • 所以您希望第一项位于底部,第二项位于其上方,依此类推?
  • 第一个在底部,第二个在下面,依此类推。添加另一个项目后,第一个项目必须上升。
  • 好的,我现在明白你想要什么了。唯一的解决方案或者我应该说使用 ListBox 执行此操作的解决方法是添加 emptx listox 项目以填充 Listbox,从而将您的第一个项目向下移动。但是,如果您决定采用这种方式,则必须覆盖 ListBox 项目选择和项目索引的默认方法,以便这些空项目不会干扰正常处理。无论如何,这是一个非常丑陋的解决方案,可能会导致其他问题。所以也许搜索其他一些组件可能是更好的方式。

标签: delphi listbox firemonkey listboxitem delphi-xe7


【解决方案1】:

使用索引为0 的TStrings InsertInsertObject 方法:

ListBox1.Items.Insert(0,'New Item');

【讨论】:

  • 但请确保测试空列表以添加第一个,如下所示:IF ListBox1.Items.Count=0 THEN ListBox1.Items.Add('1st item') ELSE ListBox1。 Items.Insert(0,'新项目 - 在顶部');因为我认为您不能插入到空列表中(如果我错了,请纠正我)
  • 我认为这个问题问的不是如何将项目插入到第一个位置,而是如何实际翻转列表框(使第一个添加的项目出现在列表的底部)。
  • @HeartWare 插入0 以获取空列表没有问题。
  • @TLama 啊,可能是。我认为除了自定义绘画之外没有简单的解决方案......
  • @TLama,是的,我的意思是如何翻转列表框。我希望项目出现在列表的底部。
【解决方案2】:

TListBox 可能是从这里开始的错误位置。而是使用 TScrollBox。将您的项目添加为子项。每次添加项目时,都会根据项目之后(下方)的高度重新计算每个项目的 Position.Y。

(重新思考):实际上,如果在每次插入后重新计算位置并调用 ScrollBy,则 TListBox 可能是可能的。

【讨论】:

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