2013-01-04 22 views
9

Pole tekstowe lub richtextbox, jedyne, czego chcę, to wywołanie funkcji po przesunięciu paska przewijania.Catch Textbox Przewiń wydarzenie?

Znalazłem już GetScrollPos i SetScrollPos. Myślałem o okresowym sprawdzaniu pozycji paska przewijania, ale musi istnieć lepszy sposób. Jaki jest lepszy sposób?

Aktualizacja: Używanie WinForms

+0

Czy za pomocą programu Windows formularz lub WPF –

+0

możliwy duplikat [Jak mogę zapisać zdarzenie, które się dzieje, gdy mysz przewija w TextBox?] (Http://stackoverflow.com/questions/2667175 4/how-can-i-write-a-event-that-happens-when-mouse-scrolls-in-textbox) – drzaus

Odpowiedz

7

Zakładając WinForms, można spróbować 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

Dzięki. Dodanie WM_MOUSEWHEEL czyni go jeszcze lepszym. –

+0

@m_poorUser Cieszę się, że pomogło. Zaktualizowano odpowiedź na kompletność. – LarsTech

+0

nadal nie działa, jeśli zmiana zostanie zmieniona, ponieważ naciśnij klawisz w górę lub w dół. – qakmak

0

Nawet lepiej - ukryty MouseWheel zdarzenie: https://stackoverflow.com/a/26672097/1037948

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

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

Istnieją inne możliwości przewijania w oknie TextBox niż przy użyciu kółka myszy. Wystarczy pomyśleć o wybraniu tekstu z bieżącego pola. Spowoduje to przewinięcie. Lub za pomocą paska przewijania. –

+0

@PaulKertscher duh; Musiałem napisać tutaj, myśląc, że to było pytanie o to samo co połączony wątek. Wskazuję czas składania wniosków i twierdzę, "To było po długim, garbatym dniu!" – drzaus