2009-04-17 9 views
0

ScrolledWindowをスクロールするときにコードを実行する必要があるときに、どのウィジェットを捕捉する必要がありますか?私が使用していますgtkでのスクロールイベントの取得#

THSウィジェットツリーは次のとおりです。 (私のウィジェット:Gtk.Container)>ビューポート>スクロールウィンドウ

私はそれらのすべてに接続されているイベントハンドラなど、ScrollEvent、ScrollChildの多くの組み合わせを試してみましたが、何かを実行するのは、アプリケーションの起動時にSetScrollAdjutstmentsが(x = 0、y = 0)に変更されるViewportのイベントだけです。

答えて

2

関連するスクロールバーにあるGtkAdjustmentに添付し、その "changed"イベントに反応する必要があります。スクロールバーは範囲であるため、これを行うにはgtk_range_get_adjustment()コールを使用します。

+0

これはうまくいきましたが、gtk#...ではちょっと面倒です。コードを別に追加しました。 – viraptor

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 
} 

あなたはそれらのウィジェットのいずれかの親を変更する必要がある、またはタイプを変更すると、ハードコードの種類を変更してから切断処理する必要がある可能性がある場合前の親。

+0

この例を追加していただきありがとうございました。 –