2009-04-17 37 views
0

當滾動ScrolledWindow時需要運行某些代碼時,應該捕獲哪個小部件的哪個事件?在gtk中捕獲滾動事件#

我使用的部份部件樹是: (我的小工具:Gtk.Container)>視窗> ScrolledWindow

我試過表示ScrollEvent,ScrollChild等事件處理程序連接到所有這些的多種組合,但只有一個運行任何事情的是來自Viewport的事件,該事件在應用程序啓動時將SetScrollAdjutstments更改爲(x = 0,y = 0)。

回答

2

您應該附加到住在相關滾動條中的GtkAdjustment,並對其「changed」事件作出反應。由於滾動條是範圍,您可以使用gtk_range_get_adjustment()調用來執行此操作。

+0

它的工作,但在gtk#中有點棘手... ... - 分別添加代碼。 – viraptor 2009-04-17 13:14:54

0

unwind的答案是正確的。 只是發表我的代碼,以防有人需要一個完整的解決方案:

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

如果您需要更改任何這些部件的父母,或可能需要改變類型,改變硬編碼類型和處理來自斷開以前的父母。

+0

感謝您添加示例,很有幫助。 – 2012-10-12 22:29:43

相關問題