代码之家  ›  专栏  ›  技术社区  ›  viraptor

在GTK中捕获滚动事件#

  •  0
  • viraptor  · 技术社区  · 15 年前

    当滚动滚动窗口时需要运行一些代码时,我应该从哪个小部件捕获哪个事件?

    我使用的小工具树是: (我的小工具:gtk.container)>viewport>滚动窗口

    我尝试了许多ScrollEvent、ScrollChild等的组合。事件处理程序连接到所有的事件处理程序,但唯一运行任何操作的是一个来自Viewport的事件,当应用程序启动时,有关setScrollAdjustments的更改为(x=0,y=0)。

    2 回复  |  直到 15 年前
        1
  •  2
  •   unwind    15 年前

    你应该附加到 GtkAdjustment 生活在相关的滚动条中,并对其 changed “事件。由于滚动条是范围,因此使用 gtk_range_get_adjustment() 打电话来做这个。

        2
  •  0
  •   viraptor    15 年前

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

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

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