2016-05-03 9 views
0

私はGtkを初めて使用しています.Gtk#を使用しています。私はTreeViewコンポーネントを使用していて、ユーザーがいつ新しいエントリを選択するかを知りたい。Gtk#TreeViewどの項目が選択されているかを判断します。

私はTreeView.Selection.SelectFunctionを使用しようとしました。しかし、これは選択が行われる前に呼び出されます。これは私が望むものではありません。私は以前に選択されたものではなく、ユーザーが今選択したものを知りたい。これを達成するにはどうすればいいですか?

おかげ

これは私は現在、あなたが選択したモデルやITERを取得するためにtreeview.Selection.GetSelected()操作を使用することが可能なButtonPressEventのハンドラをしたい

catalogTreeView.Selection.SelectFunction = CategorySelected; 


bool CategorySelected(Gtk.TreeSelection selection, Gtk.TreeModel model, Gtk.TreePath path, bool abool) { 
    TreeIter iter; 


    if (selection.GetSelected (out model, out iter)) { 
     Console.WriteLine("abool = " + abool); 
     Console.WriteLine("Path of selected row = {0}", model.GetPath (iter)); 
     Console.WriteLine(model.GetValue (iter, 0)); 
    } 

    return true; 
} 

答えて

0

を持っているものですあなたがすでにいるように。 NB。このイベントハンドラにGLib.ConnectBeforeAttribute属性を追加し、イベントをツリービューのイベントリストに追加する必要があります。例えば。

treeview.Events |= EventMask.ButtonPressMask; 
treeview.ButtonPressEvent += YourOnButtonPressEvent; 

... 

[GLib.ConnectBeforeAttribute] 
protected void YourOnButtonPressEvent (object o, ButtonPressEventArgs args) 
{ 
    // code here 
} 
+0

私はこれをやってみましたが、YourOnButtonPressEvent関数は、私が持っていたCategorySelected関数よりも早く呼び出されます。選択が更新された後、後で呼び出される関数が必要です。 – Dalanchoo

+0

こんにちは、私はあなたがここで達成したいことを誤解しているかもしれません。選択が行われる前にあなたが電話したと言ったら、どういう意味ですか? – muszeo

+0

私は列に分割されたアプリを作っています。列1はツリービューをフィルタとして使用します。ユーザーの選択に基づいて、私は列2を埋めます。 列1には、それぞれがサブアイテムを持つ「playerItems」、「courtProps」、および「moves」というノードが含まれています。 playerItemsをクリックすると、selection.GetSelectedは何も返されないので、列2は埋められません。 "courtProps"をクリックすると、GetSelectedがcourtPropsを返すので、2列目は "playerItems"に基づいて塗りつぶされます。 「移動」をクリックすると、GetSelectedは「courtProps」を返します。 GetSelectedが選択内容を返す場所で実行されるコードが必要ですが、変更内容は返されません。 – Dalanchoo

関連する問題