如下代碼:
[DllImport("user32.dll", EntryPoint = "GetScrollPos")]
public static extern int GetScrollPos(IntPtr hwnd, int nBar);
private void button1_Click(object sender, EventArgs e)
{
//一.得到垂直滾動條的位置
int i = GetScrollPos(this.listView1.Handle, 1);
//二.難點在這一步,如何取得listView1控制元件的滾動條區域的長度
int b = 1;
//三.判斷
if (i == b)
{
MessageBox.Show("到底部了");
}
}
通過第一步可以獲取到當前滾動條的位置,難點在第二部,如何知道這個位置已經位于該控制元件的底部了呢?
我想實作一個效果,就是實作文本框的重繪,如果滾動條位置位于底部了,我就自動將焦點更新到最新的文本,如果滾動條位置并非在底部(正在拖動滾動條查看前面的資料),我就不更新焦點。
想實作這個效果就必須要能夠實時判斷滾動條是否位于底部了,請教各位大神。
uj5u.com熱心網友回復:
把滾動條拉到底部,看下GetScrollPos(this.listView1.Handle, 1)的值len,如果i小于len就是沒到底咯
uj5u.com熱心網友回復:
我的意思就是不滾動到底部就能獲取到i的值
uj5u.com熱心網友回復:
我的建議,和你不滾到底部,沒沖突啊。你先讓它拉到底部,獲取這個時候的值,比如說len。也就是說只要GetScrollPos(this.listView1.Handle, 1)不等于len,肯定是沒到底部的啦。
uj5u.com熱心網友回復:
滾動條到底的時候,好像當前位置值+最大的步移量=長度,uj5u.com熱心網友回復:
/// <summary>
/// 獲取滾動條范圍
/// </summary>
[DllImport("user32.dll", EntryPoint = "GetScrollRange", CharSet = CharSet.Auto)]
public static extern int GetScrollRange(IntPtr hwnd, int nBar, out int minPos, out int maxPos);
https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-getscrollrange
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/83734.html
標籤:C#
