2009-04-17 4 views
0

Welches Ereignis von welchem ​​Widget sollte ich fangen, wenn ich Code ausführen muss, wenn ScrollledWindow gescrollt wird?Abfangen des Scrolling-Ereignisses in gtk #

Ths Widgets Baum Ich benutze ist: (mein widget: Gtk.Container)> Ansichtsfenster> ScrolledWindow

Ich habe versucht, viele Kombinationen von Scroll, ScrollChild etc. Event-Handler für alle von ihnen verbunden, aber die Nur eine, die irgendetwas ausführt, ist ein Ereignis aus Viewport, das über SetScrollAdjutstments beim Starten der Anwendung in (x = 0, y = 0) geändert wird.

Antwort

2

Sie sollten an die GtkAdjustment in der entsprechenden Bildlaufleiste anhängen und reagieren auf seine "changed" -Ereignis. Da Bildlaufleisten Bereiche sind, verwenden Sie dazu den Aufruf gtk_range_get_adjustment().

+0

Es hat funktioniert, aber ist ein bisschen schwierig in gtk # ... - Code separat hinzugefügt. – viraptor

0

die Antwort von unwind war korrekt. Nur meinen Code, falls jemand Entsendung muss eine vollständige Lösung:

// in the xxx : Gtk.Container class: 

protected override void OnParentSet(Widget previous_parent) { 
    Parent.ParentSet += HandleParentParentSet; 
} 

void HandleParentParentSet(object o, ParentSetArgs args) { 
    ScrolledWindow swn = (o as Widget).Parent as ScrolledWindow; 
    swn.Vadjustment.ValueChanged += HandleScrollChanged; 
} 

void HandleScrollChanged(object sender, EventArgs e) { 
    // vertical value changed 
} 

Wenn Sie die Eltern eines dieses Widgets ändern müssen, oder müssen die Typen ändern und die fest codierten Typen ändern und Griff aus der Löse vorheriger Elternteil.

+0

Danke für das Hinzufügen des Beispiels, war hilfreich. –