IT Share you

ListBox의 맨 아래로 스크롤하는 방법은 무엇입니까?

shareyou 2020. 12. 14. 21:07
반응형

ListBox의 맨 아래로 스크롤하는 방법은 무엇입니까?


Winforms ListBox를 작은 이벤트 목록으로 사용하고 있으며 마지막 이벤트 (하단)가 표시되도록 채우려 고합니다. SelectionMode없음으로 설정됩니다. 사용자는 목록을 스크롤 할 수 있지만 처음부터 끝까지 스크롤하는 것을 선호합니다.

같은 것들에 대한 지원의 부족에서 찾고 ScrollIntoView, EnsureVisible, 나는 사용자 지정 컨트롤을 만들어야합니다 가정하고 그 목록 상자에서 상속; 그러나 나는 거기에서 무엇을 해야할지 모르겠습니다.

몇 가지 조언?


TopIndex속성을 적절하게 설정하면 쉽게 할 수 있다고 생각합니다 .

예를 들면 :

int visibleItems = listBox.ClientSize.Height / listBox.ItemHeight;
listBox.TopIndex = Math.Max(listBox.Items.Count - visibleItems + 1, 0);

아래로 스크롤 :

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

맨 아래로 스크롤하여 마지막 항목을 선택하십시오.

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


이것은 내가 WPF (.Net Framework 4.6.1)에 대해 끝낸 것입니다.

Scroll.ToBottom(listBox);

다음 유틸리티 클래스 사용 :

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(); }
            };
        }
    }
}

참고URL : https://stackoverflow.com/questions/8796747/how-to-scroll-to-bottom-of-listbox

반응형