How to scroll to bottom of ListBox?

前端 未结 3 2025
眼角桃花
眼角桃花 2020-12-10 00:27

I am using a Winforms ListBox as a small list of events, and want to populate it so that the last event (bottom) is visible. The SelectionMode is set to none. T

相关标签:
3条回答
  • 2020-12-10 01:01

    Scroll to the bottom:

    listbox.TopIndex = listbox.Items.Count - 1;

    Scroll to the bottom, and select the last item:

    listbox.SelectedIndex = listbox.Items.Count - 1;

    0 讨论(0)
  • 2020-12-10 01:02

    This is what I ended up with for WPF (.Net Framework 4.6.1):

    Scroll.ToBottom(listBox);
    

    Using the following utility class:

    public partial class Scroll
    {
        private static ScrollViewer FindViewer(DependencyObject root)
        {
            var queue = new Queue<DependencyObject>(new[] { root });
    
            do
            {
                var item = queue.Dequeue();
                if (item is ScrollViewer) { return (ScrollViewer)item; }
                var count = VisualTreeHelper.GetChildrenCount(item);
                for (var i = 0; i < count; i++) { queue.Enqueue(VisualTreeHelper.GetChild(item, i)); }
            } while (queue.Count > 0);
    
            return null;
        }
    
        public static void ToBottom(ListBox listBox)
        {
            var scrollViewer = FindViewer(listBox);
    
            if (scrollViewer != null)
            {
                scrollViewer.ScrollChanged += (o, args) =>
                {
                    if (args.ExtentHeightChange > 0) { scrollViewer.ScrollToBottom(); }
                };
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-10 01:08

    I believe you can do that easily by setting the TopIndex property appropriately.

    For example:

    int visibleItems = listBox.ClientSize.Height / listBox.ItemHeight;
    listBox.TopIndex = Math.Max(listBox.Items.Count - visibleItems + 1, 0);
    
    0 讨论(0)
提交回复
热议问题