2013-01-04 95 views
9

Textbox或richtextbox,只有我想要的是當滾動條移動時觸發一個函數。捕捉文本框滾動事件?

我已經找到了GetScrollPos和SetScrollPos。我想週期性檢查滾動條的位置,但必須有更好的方法。那麼,更好的方法是什麼?

更新:使用的WinForms

+0

您使用的Windows窗體或WPF –

+0

[我如何編寫鼠標在TextBox中滾動時發生的事件?](http://stackoverflow.com/questions/2667175 4/how-can-i-write-an-event-that-happen-when-mouse-scroll-in-textbox) – drzaus

回答

7

假設的WinForms,你可以嘗試pinvoking:

public class MyRTF: RichTextBox { 

    private const int WM_HSCROLL = 0x114; 
    private const int WM_VSCROLL = 0x115; 
    private const int WM_MOUSEWHEEL = 0x20A; 

    protected override void WndProc(ref Message m) { 
    base.WndProc(ref m); 

    if (m.Msg == WM_VSCROLL || m.Msg == WM_HSCROLL || m.Msg == WM_MOUSEWHEEL) { 
     // scrolling... 
    } 
    } 

} 
+0

謝謝。添加WM_MOUSEWHEEL使其更好。 –

+0

@m_poorUser很高興幫助。更新了完整性的答案。 – LarsTech

+0

如果因爲按下向上或向下鍵而導致滾動更改,則仍然無法工作。 – qakmak

0

更妙的是 - 隱藏MouseWheel事件:https://stackoverflow.com/a/26672097/1037948

public Form1() 
{ 
    InitializeComponent(); 
    textBox1.MouseWheel += textBox1_MouseWheel; 
} 

void textBox1_MouseWheel(object sender, MouseEventArgs e) 
{ 
    throw new NotImplementedException(); 
} 
+0

在使用鼠標滾輪的情況下,還有其他的可能性可以在文本框中滾動。考慮從當前框中選擇文本。這也會滾動。或者使用滾動條。 –

+0

@PaulKertscher duh;我必須在這裏發佈,認爲這是與鏈接線程相同的問題。我指出提交時間並聲稱「這是在一個漫長的駝峯日之後!」 – drzaus