【问题标题】:Automatically scroll the listview from top to bottom in c#在c#中自动从上到下滚动列表视图
【发布时间】:2013-11-26 06:06:06
【问题描述】:

大家好。

我目前正在创建某种广告应用程序。它是从上到下滚动的简单文本,并且会再次重复。我目前正在使用 listview 在 c# 中执行此操作。将在列表视图中显示的文本将来自数据库。我正在使用计时器自动刷新表单。问题是如何在每次表单加载时自动移动它或从上到下滚动它,并且每次完成时都会再次重复。

谢谢。

这是King King先生要求的代码。

 private void timer1_Tick(object sender, EventArgs e)
    {
        this.Refresh();
        listView1.TopItem = listView1.Items.Cast<ListViewItem>().LastOrDefault();
    }

【问题讨论】:

  • 表示你想要自动滚动列表?顺便说一句,到目前为止你尝试过什么?
  • 我已将代码放入定时器功能中。我想问的是,listview 中是否有类似 listview.selecteditem += 1 这样的东西,这样每次计时器滴答时,listview 都会自动滚动?

标签: c# winforms visual-studio-2010 listview


【解决方案1】:

添加项目后:

listView.EnsureVisible(listView.Items.Count - 1);

【讨论】:

    【解决方案2】:

    您可以将ListView.TopItem 设置为最后一项,它应该确保滚动条位于底部:

    listView1.TopItem = listView1.Items[listView1.Items.Count-1];
    

    您应该确保您的listView1 至少有 1 个项目,这是一个更安全的 LINQ 版本:

    listView1.TopItem = listView1.Items.Cast<ListViewItem>().LastOrDefault();
    

    更新

    如果你想按每个项目从上到下滚动,试试这个:

    int lastIndex;
    private void timer1_Tick(object sender, EventArgs e)
    {
        this.Refresh();
        int i = listView1.TopItem == null ? -1 : listView1.TopItem.Index;        
        if(i>-1) {
          if(i == lastIndex || i == listView1.Items.Count - 2) i = 0;
          lastIndex = i;
          listView1.TopItem = listView1.Items[++i];
        }
    }
    

    【讨论】:

    • 感谢您的回答先生。但是您共享的代码使列表视图仅在最后一部分滚动。 (我已将您的代码与刷新功能一起放在计时器功能中)它根本不动。每次计时器滴答时,是否有类似 listview.selectedindex += 1 的东西?
    • @LucasJuan scrolled in the last part only 是什么意思?代码对我来说没问题,唯一的条件是你的ListView 必须有ViewListDetails
    • @LucasJuan 如果可能的话,你应该发布你的实际代码,问题可能出在其他地方。
    • 我的意思是先生,它只是留在列表中的最后一项。它不像我想成为的那样移动。每秒一项。
    • @LucasJuan 不清楚,你的意思是如果你的listview有4个项目,你想从item1滚动到item2旁边,item3,然后停在item4?
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多