–абота с 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 ();

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

treeview.png

 

ѕо€снение к коду:
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);
}

 

treeclickresult.png

 

 

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


«ащитный код
ќбновить

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

‘отоальбом

fotic.jpg

ќблако “егов