0

ScrolledWindow がスクロールされているときにコードを実行する必要がある場合、どのウィジェットからどのイベントをキャッチすればよいですか?

私が使用しているウィジェットツリーは次のとおりです: (私のウィジェット: Gtk.Container) > ビューポート > ScrolledWindow

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

4

2 に答える 2

2

関連するスクロールバーにあるGtkAdjustmentにアタッチし、その「変更された」イベントに反応する必要があります。スクロールバーは範囲であるため、gtk_range_get_adjustment()呼び出しを使用してこれを行います。

于 2009-04-17T12:58:25.083 に答える
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
}

これらのウィジェットのいずれかの親を変更する必要がある場合、またはタイプを変更してハードコーディングされたタイプを変更し、以前の親からの切断を処理する必要がある場合。

于 2009-04-17T13:20:38.290 に答える