2013-01-04 58 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