2012-01-09 11 views
45

Tôi đang sử dụng Hộp danh sách Winforms dưới dạng một danh sách nhỏ các sự kiện và muốn phổ biến nó để sự kiện cuối cùng (dưới cùng) hiển thị. SelectionMode được đặt thành không. Người dùng có thể cuộn danh sách nhưng tôi muốn nó bắt đầu được cuộn đến cuối.Làm cách nào để cuộn xuống cuối ListBox?

Nhìn vào sự thiếu hỗ trợ cho những thứ như ScrollIntoView, EnsureVisible, tôi giả định rằng tôi sẽ cần tạo một điều khiển tùy chỉnh kế thừa từ ListBox; tuy nhiên tôi không chắc phải làm gì từ đó.

Một số con trỏ?

+2

Đã bình thường 'listBox1.SelectedIndex = listBox1.Items.Count - 1;' không hoạt động cho bạn? –

+1

Điều đó hoạt động khi 'SelectionMode' không được đặt thành' None'. Tôi cần phải ngăn chặn việc chọn các mục trong danh sách cụ thể này (để tránh nhầm lẫn người dùng). – JYelton

Trả lời

75

Tôi tin rằng bạn có thể làm điều đó dễ dàng bằng cách đặt thuộc tính TopIndex một cách thích hợp.

Ví dụ:

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

+1 Một chút phức tạp, nhưng đó chắc chắn không phải lỗi của bạn! Cảm ơn các giải pháp và ví dụ. – JYelton

+29

Dường như hoạt động tốt nếu bạn chỉ đặt 'TopIndex' thành mục cuối cùng thay vì lo lắng về điều gì thực sự ở trên cùng, ví dụ: 'listBox.TopIndex = listBox.Items.Count - 1;' –

28

Di chuyển đến dưới cùng:

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

Di chuyển đến phía dưới, và chọn mục cuối cùng:

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

Không cần phải thực hiện các phép tính phức tạp ở đây, ListBox sửa đầu vào không đúng cho bạn.

+0

Tôi thích giải pháp này, đơn giản hơn rất nhiều. Cảm ơn! –

+0

Giải pháp tốt nhất., –