2009-09-04 89 views
3

我想有2(富)texboxes(vc#2k8)相同的滾動...所以當我滾動tb1 tb2滾動到相同的位置。我用這個功能:c#:SetScrollPos(user32.dll)

[DllImport("user32.dll")] 
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw); 

[DllImport("user32.dll")] 
public static extern int GetScrollPos(IntPtr hwnd, int nBar); 

這工作正常,但

int pos = GetScrollPos(tb1.Handle, 1); 
SetScrollPos(tb2.Handle, 1, pos, true); 

只設置滾動條到同一位置,但倒在有更新的文字。 tb2.Update()或刷新將無法正常工作...

請幫助。泰

回答

3

我找到答案

[DllImport("user32.dll")] 
static extern int SetScrollPos(IntPtr hWnd, int nBar, 
       int nPos, bool bRedraw); 

[DllImport("User32.Dll", EntryPoint = "PostMessageA")] 
static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam); 



public void ScrollTo(int Position) { 
    SetScrollPos((IntPtr)textBox1.Handle, 0x1, Position, true); 
    PostMessage((IntPtr)textBox1.Handle, 0x115, 4 + 0x10000 * Position, 0); 
} 
+0

謝謝你爲這個!這是關於Stackoverflow處理適當的32位增量滾動(我以前使用的代碼只有16位數據,並使用「WM_VSCROLL」)的唯一帖子。上面有沒有非常微妙的變化?我問,因爲雖然它解決了我的情況,我不得不做一些更多的工作,以阻止一些行閃爍.. Btw到GetScrollPos,可以使用:public int GetScroll(){return GetScrollPos((IntPtr)textBox1.Handle,(int )ScrollBarType.SbVert); } – 2011-11-06 01:11:39

+0

這工作的地方很多其他解決方案失敗,謝謝 – 2016-11-01 21:11:53

相關問題