Работа с GTK# TreeView в Mono (на примере Monodevelop)

15:03:2013 Рі.

В этой заметке рассматривается вопрос работы с контролом TreeView, используя библиотеку GTK# на платформе .NET Mono.

К сожалению, в сети очень мало информации по работе с этой технологией и этим контролом в частности. Поэтому Tree View в GTK# и рассматривается в этой заметке. В частности, вопросы, которые касаются хранения в нодах этого контрола отдельнх классов, содержищах данные, обработку и выборку данных по двойному щелчку.

Для примера взято дерево, которое хранит в программе документы (для примера мануалы). Соответственно, в дереве могут содержаться как разделы, так и непосредственно документы.

Объявим класс, для примера, просто содержащий две открытых строки. В реальном примере в нем могут размещаться любые объекты, к примеру, текстовые документы и прочие данные.

publicclass Parrams
{
    publicstring first;
    publicstring seckond;
    public Parrams()
    {
        first = "Перывая строка";
        seckond = "Вторая строка";
    }
}

Gtk.TreeViewColumn manualColumn = new Gtk.TreeViewColumn ();
manualColumn.Title = "Тематика";
Gtk.CellRendererText manualNameCell = new Gtk.CellRendererText ();
manualColumn.PackStart (manualNameCell, true);
manualColumn.AddAttribute (manualNameCell, "text", 0);

Gtk.TreeStore manualTree = new Gtk.TreeStore (typeof (string), typeof(object));
Gtk.TreeIter iter = manualTree.AppendValues ("Linux",
new Parrams());
manualTree.AppendValues ("Windows",
new Parrams());
Gtk.TreeIter centos = manualTree.AppendValues (iter, "CentOS", new Parrams());
Gtk.TreeIter hosting = manualTree.AppendValues (centos, "Hosting",
new Parrams());
manualTree.AppendValues (centos, "Остальное",
new Parrams());
TV_ManualStructure.AppendColumn (manualColumn);
TV_ManualStructure.Model = manualTree;
ShowAll ();

Примером выполнения будет дерево, которое показано на иллюстрации ниже:



 

Пояснение к коду:
TV_ManualStructure - объект TreeView, который мы поместили на нашу форму в редакторе Monodevelop в GTK#.
Данное дерево в каждом своем элементе будет содержать строку и объект, в который может быть помещено что угодно - это прописано в инициализации переменной manualTree. Отображено же лишь только текстове значение строки - это прописано в верхней части кода, и прописано в добавлении колонки в отображаемую таблицу Tree View GTK#.

Получение данных и TreeView GTK# при двойном щелчке

Теперь нам было бы интересно при двойном щелчке получить доступ к непосредственному объекту, который был выбран этим двойным щелчом.

На примере кода выше по двойному щелчку на кажом из элементов мы хотели бы получать один из объектов класса Parrams, который присоединен к отображаемому объекту.

Для этого добавляем обработкик события OnTVManualStructureRowActivated (TV_ManualStructure, как помним - имя переменной типа Tree View, которое было задано в редакторе MonoDevelop).

protected void OnTVManualStructureRowActivated (object o, Gtk.RowActivatedArgs args)
{
    var model = TV_ManualStructure.Model;
    TreeIter iter;
    model.GetIter (out iter, args.Path);
    object val = model.GetValue (iter, 1);
    Parrams p = val as Parrams;
    if(p != null)
      MessageBox.Show(p.seckond);
}

 

 

 

Добавить комментарий



Обновить

« Получить выбранный элемент TreeView в Mono GTK# .NET   Пример:контекстное меню в Mono .NET GTK# - как реализовать »
← Раньше

Фотоальбом

fotic.jpg

Облако Тегов