在gtk中捕获滚动事件#

时间:2009-04-17 12:52:01

标签: gtk scroll gtk#

滚动ScrolledWindow时,我需要在运行某些代码时从哪个小部件中捕获哪个事件?

我使用的小部件树是: (我的小部件:Gtk.Container)>视口> ScrolledWindow

我尝试了许多ScrollEvent,ScrollChild等事件处理程序的组合连接到所有这些组合,但是唯一运行任何东西的是来自Viewport的事件,关于将SetScrollAdjutstments更改为(x = 0,y = 0)时申请开始。

2 个答案:

答案 0 :(得分:2)

您应该附加到相关滚动条中的GtkAdjustment,并对其“changed”事件做出反应。由于Scrollbars是Ranges,您可以使用gtk_range_get_adjustment()调用来执行此操作。

答案 1 :(得分:0)

放松的回答是正确的。 只需发布我的代码,以防有人需要完整的解决方案:

// 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
}

如果您需要更改任何这些小部件的父级,或者可能需要更改类型并更改硬编码类型并处理与前一个父级的断开连接。