Моно получить положение узла в TreeView - PullRequest
0 голосов
/ 10 марта 2012

Мне нужно получить положение узла в 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].

Ответы [ 3 ]

0 голосов
/ 12 марта 2012

В API GTK + C вы получите ссылку на CellRendererText в качестве первого аргумента вашего обработчика сигнала. Я считаю, что вы можете получить доступ к этому в GTK # как args.Args [0], но я не уверен на 100% в этом.

Я не вижу очевидного пути перехода от объекта CellRendererText к соответствующему столбцу в вашем TreeStore (но я могу ошибаться в этом). Чтобы это было полезно, вам, возможно, придется создать собственное отображение.

Альтернативой может быть использование другого обработчика событий для события Edited каждого CellRendererText и проверка того, что каждый обработчик знает правильный номер столбца.

0 голосов
/ 11 мая 2015

вы можете определить обработчик события следующим образом

int i = counter;
cellTextRenderer.Edited  +=( sender,  args) => {
 TreePath path = new TreePath (args.Path);
 TreeIter iter;
 musicListStore.GetIter (out iter, path);   
 //i is column number
 musicListStore.SetValue (iter, i, args.NewText);
};
0 голосов
/ 10 марта 2012

Я запустил пример программы GTkDemo, которая поставляется с платформой Mono для Windows (каталог сэмплов), и я мог редактировать примеры редактируемых ячеек в виде дерева, я вставлял код, где он обрабатывает событие,

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);
}

Где хранится список ListStore. Я рекомендую вам увидеть полный исходный код, он поставляется с Mono Framework для Windows под [Программные файлы (x86)] \ Mono-2.10.8 \ samples \ gtk-sharp-2.0 \ GtkDemo.

Надеюсь, это поможет вам.

...