0

でノードの位置を取得する必要がありますGtk.TreeView。行とユーザーが変更した内容を取得できますが、列をハードコアする必要があります。取得する方法はありますか?

コードは次のとおりです。

private void artistNameCell_Edited (object o, Gtk.EditedArgs args)
{
    Gtk.TreeIter iter;

    musicListStore.GetIter (out iter, new Gtk.TreePath (args.Path));

    Song song = (Song) musicListStore.GetValue (iter, 0);
    song.Artist = args.NewText;
}

ここからですhttp://www.mono-project.com/GtkSharp_TreeView_Tutorial、編集可能なテキストセルセクションです。コードでは、列番号 0:-/ を選択するだけですが、ユーザーがクリックする列が必要です。それぞれの正確なノード位置は のようなものですがnode[row,column]、今はnode[iter,0].

4

3 に答える 3

0

GTK + C APIでは、シグナルハンドラーの最初の引数としてCellRendererTextへの参照を取得します。GTK#でargs.Args [0]としてこれにアクセスできると思いますが、100%確信はありません。

CellRendererTextオブジェクトからTreeStoreの対応する列に移動する明確な方法がわかりません(ただし、それについては間違っている可能性があります)。これを有効にするには、独自のマッピングを作成する必要がある場合があります。

別の方法は、各CellRendererTextのEditedイベントに異なるイベントハンドラーを使用し、各ハンドラーが正しい列番号を知っていることを確認することです。

于 2012-03-12T04:16:13.543 に答える
0

Windows の Mono フレームワーク (samples ディレクトリ) に付属するサンプル プログラム GTkDemo を実行したところ、ツリービューで編集可能なセルのサンプルを編集できました。イベントを処理する場所にコードを貼り付けました。

private void TextCellEdited(object o, EditedArgs args)
{
TreePath path = new TreePath(args.Path);
TreeIter iter;
store.GetIter(out iter,path);
int i = path.Indices[0];
Item foo = (Item)articles[i];
foo.Product = args.NewText;
store.SetValue (iter, (int) Column.Product, foo.Product);
}

store は ListStore です。完全なソース コードを確認することをお勧めします。[Program files(x86)]\Mono-2.10.8\samples\gtk-sharp-2.0\GtkDemo の下にある Mono Framework for Windows に付属しています。

これがお役に立てば幸いです。

于 2012-03-09T22:39:11.913 に答える