Ctreelistctrl простейший treeview с колонками


Ctreelistctrl: простейший treeview с колонками

кто подскажет Tree view в несколько столбцов чтобы работало и на 32/64 битных виндах?

Желательно легковесный, загружаться будут десятки, сотни тысяч веток.

> Tree view в несколько столбцов
.
это. лес растить?

TreeView — визуальный компонент.
Пожалей пользователя, которому предлагаешь юзать сотни тысяч веток
:)

Пользователь не будет просматривать все. Будет, предположим по 10 веток на каждом уровне. У каждой ветки 10 потомков и всего 5 уровней вложенности. Пользователь будет смотреть 10 штук на последнем уровне, но ему надо туда спуститься. Именно к к 10 веткам его интереса из всех 100000. Похоже на поиск по индексу.

Версии будут или тут внебрачные дети Петросяна собрались? ;)

Я нашел очень хороший компонент
http://www.soft-gems.net/index.php?option=com_content&task=view& >но он похоже не работает в 64битной среде

> Будет, предположим по 10 веток на каждом уровне. У каждой ветки 10 потомков и всего 5 уровней вложенности.
легко справится стандартный (из палитры дельфи) treeview, динамически ему ветки формировать (то что просматривает юзер) да и все, т.е. открывается первоначально 10 записей от корня (и где ты столбцы/руты углядел?). просто и быстро (да наверное * запретить, чтобы не мог раскрыть все и сразу, подвиснет любой).

> Версии будут или тут внебрачные дети Петросяна собрались? ;)
версий не будет пока ты хоть одно не сделаешь/убедишь, что оно тебе не подходит.

В заголовке темы ясно написано многостолбцовый.
Если с первого раза не доходит, можно так написать: МНОГОСТОЛБЦОВЫЙ.

Это означает, что каждый item будет содержать несколько колонок.
Набр колонок фиксирован и одинаковый для любого item

не бывает многостолбцовых деревьев

> Karabaz
Знаю, как сделать сабж, легко и просто. А говорить не буду.


> QAZ (07.01.12 19:26) [7]
> не бывает многостолбцовых деревьев

Эта пачиму?

В DevExpress такой есть


> QAZ (07.01.12 19:26) [7]
> не бывает многостолбцовых деревьев

Вот, на вскидку
stackoverflow.com/questions/4912873/treeview-with-columns
www.devcomponents.com/dotnetbar/treeviewcontrol.aspx
www.mimec.org/articles/mfc/mctree

Ну и для самообразования
www.google.ru/search?q=TreeView+columns

Тупой фильтр с http:// не пускал, а без — пожалуйста.

Удалено модератором
Примечание: РО на месяц

Всем спасибо за участие

Virtual Treeview r322 Delphi XE2


> Karabaz (07.01.12 23:19) [14]
>
> Всем спасибо за участие
>

Пожалуйста. Рад, что не принял участие.


> вопросец (07.01.12 20:24) [9]

патаму, что все нормальные, рабочие реализации сего чуда сделаны через ListView


> QAZ (08.01.12 12:35) [17]
> патаму, что все нормальные, рабочие реализации сего чуда
> сделаны через ListView

Ага. Значит ты хочешь заняться крючкотворством и словоблудием. Ну давай.

> не бывает многостолбцовых деревьев

Где тут упоминание TreeView или ListView? Где вообще тут говорится о какой либо реализации?
На мой взгляд, т.е. имхо, тут говорится о том, что не бывает списков с иерархической структурой данных содержащей несколько колонок данных для одного элемента.
Отсюда и мой вопрос. Пачиму не бывает?

Вопрос реализации, это вообще дело десятое, хоть на битмапе рисуй.


> Где тут упоминание TreeView

в вопросе этой темы Karabaz (07.01.12 12:21)
а т.к. в WinApi существует один вид TreeView,отседа и QAZ (07.01.12 19:26) [7]
не парься :) с новым годом

Ага, и с Рождеством :)

На вопрос подсказать multi column аналог treeview:
один просит доказывать, что мне это надо. Второй кокетничать начал дескать знает, но не скажет.
Когда жена просит за картошкой сходить тоже ей наверное отвечает, что могла бы и сама накопать, но где он не скажет.
Третий про WinApi начал. При чем тут WinApi то вообще?
Если бы в WinApi не было TreeView он бы наверное капслоком писал, что многостолбцовых деревьев не бывает. Так чтобы ну все уже поверили.

Занятный серпентарий. Прошу прощения, что нарушил ваш покой здесь.

Мне что-то реакция отвечающих непонятна, вы что никогда не видели того, что хочет автор вопроса? В The Bat, например, такое используется слева где дерево с папками и ящиками, там одновременно комбинация и TreeView и ListView. По-моему сделано как раз на базе Virtual TreeView.



> Karabaz (08.01.12 19:41) [21]
> знает, но не скажет.

А Вы так и не поняли, почему?

Ну, что ж, если с первого раза не доходит (это Ваши слова, не мои), то можно и пояснить — потому что [3] и [5].


> DVM © (08.01.12 19:53) [22]
> комбинация и TreeView и ListView.

Такая комбинация используется в куче программ, начиная с Проводника. И с самого начала было очевидно, что она и нужна автору. Но тут же дети Петросяна собрались. до которых, к тому же, с первого раза не доходит.


> Karabaz (08.01.12 19:41) [21]

Я ж тебе в [10] ответил. Сам такой использую.

> Юрий Зотов ©

Кончай уже петросянить.

DVM © (08.01.12 19:53) [22]
> Мне что-то реакция отвечающих непонятна, вы что никогда не видели того, что хочет автор вопроса?
видели но по его названию «не связали». для меня к примеру это скорее DBTreeView (узел = запись, показ как угодно, можно и по столцам), но дерево все одно «одностолбцовое», классическое.

Юрий Зотов © (08.01.12 20:58) [24]
> Такая комбинация используется в куче программ, начиная с Проводника.
в проводнике как раз просмотрищик дерева «одностолбцовый» (XP, может позже что поменялось, не хочу искать). а просмотрщик списка лежит рядом, отдельно, не «гибрид», т.что не надо.

> И с самого начала было очевидно, что она и нужна автору.
да ну? а чего так поздно, и пример такой не удачный?


> Третий про WinApi начал.

я про него не начал,я им кончил ;)

> Вопросец, спасибо.

что погуглил за меня.

TreeView с колонками

Мне нужен многоколонный Treeview для приложения, которое я пишу, мне было интересно, знал ли кто-нибудь о бесплатном рабочем (в Vs-2010) многоколонном Treeview.

4 ответов

существует ряд примеров элементов управления, которые можно найти в интернете:

но фаворитом всех времен, вероятно, является ObjectListView, который обеспечивает расширяемый, многоколоночный ListView, наряду со многими другими невероятно удобными особенности:

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

попробуйте этот элемент управления Microsof TreeListView WPF

вы можете сделать иллюзию для пользователя в пользовательском интерфейсе.

  1. перетащите listview и поместите его поверх treeview, который уже был помещен в форму.
  2. создайте столбцы в listview по мере необходимости.
  3. установить HeaderStyle’ свойство ‘Nonclickable’ и ‘собственность Scrollabe’ на ‘false’ элемента управления ListView.
  4. установите ширину и расположение listview, как он подходит для treeview.

TreeView с колонками

29 Vade [2011-02-06 14:02:00]

Мне нужно многозонное Treeview для приложения, которое я пишу, мне было интересно, знает ли кто-нибудь о бесплатном (в Vs-2010) многоканальном Treeview.

c# visual-studio-2010 treeview

4 ответа

53 Решение Cody Gray [2011-02-06 14:32:00]

В Интернете существует множество элементов управления примерами:

Но любимым за все время, вероятно, является ObjectListView, который предоставляет расширяемый многокластерный ListView и многие другие невероятно удобные функции:

2 LeftyX [2011-02-06 14:21:00]

Вы можете использовать этот пример здесь или загрузить control

Попробуйте этот элемент управления Microsof TreeListView WPF

Вы можете сделать иллюзию пользователю в пользовательском интерфейсе.

  • Перетащите список и отбросьте это на дерево, которое уже было помещено в форму.
  • Создайте столбцы в списке, как вам нужно.
  • Задайте для свойства ‘HeaderStyle’ свойство «Nonclickable» и «Scrollabe» для «False» в списке.
  • Установить ширину и расположение списка в соответствии с деревом.


CTreeListCtrl: The easiest TreeView with columns

WEBINAR:
On-Demand

Desktop-as-a-Service Designed for Any Cloud ? Nutanix Frame

Environment: VC6, NT4 SP3, Comctl32.dll 4.72.3110.1

Motivation

In http://www.codeguru.com, you can find some implementations of tree controls with columns. All of this implementation have the same approach: they reimplement the drawing code for a tree view control and, of course, they have to manage the column info for each node in the tree. What’s wrong with this approach ? Even if I can find it implemented in codeguru, I don’t like the idea of having to reimplement the drawing stuff only because the original tree view control does not support columns, and also Microsoft changes the GUI quickly, so you will find yourself re-writing or adding new drawing characteristics to this code.

Илон Маск рекомендует:  Рамка с поворотом

Now that you known my approach, you can download the source code and see how simple it is. This is not a tree with lots of functionality and amazing characteristics, it is only the backbone of a tree with columns implementation. Even with the reduced set of functionality, this approach lets you incorporate any technique regarding the listview control.

How to insert CTreeListCtrl into your project?

To incorporate the tree control in your project you only need to simple steps:

  1. Insert CTreeListCtrl.h and CTreeListCtrl.cpp into you project.
  2. Import the State.bmp as a resource. Give it the IDB_STATE identifier.

Now you are ready to use it.

Using the CTreeListCtrl

The current implementation offers the minimum functionality to be a «read-only» tree and the tree expects you to add the items as they will result from a «preorder» iteration to the whole tree. This means that if you have all the nodes of the tree expanded, the order in which they appear is the order in which you have to insert them. Let’s see an example.

Let’s say you have a Hard disk partition with two folders: Program Files, and Winnt. Under Program Files, you have tree folders: Microsoft Office, Microsoft Visual Studio and InstallShield. Under Winnt you have two folders: profiles and system32, and under the profiles folder you have the folders All Users, Administrator and Davidc. You have to insert the items in the tree as follows:

  1. C:\
  2. Program Files
  3. Microsoft Office
  4. Microsoft Visual Studio
  5. InstallShield
  6. Winnt
  7. profiles
  8. All Users
  9. Administrator
  10. system32

Now that let’s see the main steps to use the tree:

  1. Declare a member variable (e.g. m_tree) in the parent window class.
  2. In the WM_CREATE or WM_INITDIALOG message function handler, create the tree window. It can also be used through DDX_Control.
  3. Insert as many columns as you need as you will do with a listview control.
  4. Set the image list for the control.
  5. When you have to add items to the tree, for each item you must use the function AddItem to add it (with the information of the column 0) setting its level, and then call SetItemText for each other column.

Here is the code used to create the tree you can see in the sample image.

Future work

There are some characteristics that can or need to be added to the tree. At least:

  • Reimplement DeleteItem to delete the node and its sons.
  • Support for inserting items at any position.

    Урок 14. Работаем с TreeView

    Три урока мы с вами посвятим изучению элемента управления TreeView. Он представляет из себя дерево. У этого элемента есть узлы, у каждого узла могут быть в свойю очередь свои подузлы и т. п.. В элементе TreeView удобно показывать, например, файловую систему компьютера.

    На этом уроке мы посмотрим, как можно добавлять и удалять узлы в и из дерева.

    Создайте Windows-приложение, на форме разместите элемент TreeView. На панели Toolbox по выглядит так:


    Кроме того разместите на форме три кнопки (Button) и одно текстовое поле (TextBox). Для кнопок измените свойствО Name на add, remove и removeAll соответственно. Также для кнопок поменяйте своство Text на Add, Remove и Remove All соответственно. Для текстового поля измените свойства Name и Text на addNode и «» (пустую строку).

    В обработчики нажатий на три кнопки добавьте следующий код:

    private void add_Click(object sender, System.EventArgs e)

    // Получаем выделенный узел.

    TreeNode node = treeView1.SelectedNode;

    // Если ничего не выделено,

    // то добавляем в корень.

    // Если выделенный узел существует,

    // то добавляем к нему.

    // Очищаем текстовое поле и переводим на него фокус.

    private void remove_Click(object sender, System.EventArgs e)

    // Получаем выделенный узел.

    TreeNode node = treeView1.SelectedNode;

    // Если узел выделен,

    // то его и выделяем.

    MessageBox.Show(«Ничего не выделено»);

    // Удаление всех узлов.

    private void removeAll_Click(object sender, System.EventArgs e)

    Добавленный код должен быть ясен из комментариев.

    Можно запускать программу. После добавления нескольких узлов (имена которых мы вводим в текстовое поле) она может выглядеть она будет приблизительно так:

    Обратите внимание, что подузлы будут добавляться к выделенному узлу.

    Кнопки Remove и Remove All будут удалять выделенный узел и все узлы соответственно.

    Не нашли то, что искали? Воспользуйтесь поиском:

    Лучшие изречения: Для студентов недели бывают четные, нечетные и зачетные. 9438 — | 7438 — или читать все.

    188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

    Отключите adBlock!
    и обновите страницу (F5)

    очень нужно

    TreeView с колонками

    Мне нужно многозонное Treeview для приложения, которое я пишу, мне было интересно, знает ли кто-нибудь о свободной работе (в Vs-2010) с несколькими колонками Treeview.

    Создан 06 фев. 11 2011-02-06 11:02:30 Vade

    WinForms, WPF, ASP.NET, . И что именно будет выглядеть TreeView с несколькими столбцами? Можете ли вы разместить образ макета? Я не могу представить, как это можно было бы использовать. – Cody Gray 06 фев. 11 2011-02-06 11:17:36


    @Cody В области Delphi каждый использует Virtual Tree View для этого, и да, они используют его с несколькими столбцами! – David Heffernan 06 фев. 11 2011-02-06 11:26:27

    Ах, конечно. Если бы вы описали его как расширяемый ListView, я бы точно знал, о чем вы говорили. Нет веской причины, почему это должно быть классифицировано как одно или другое. И в отсутствие дальнейшего разъяснения, мой ответ предполагает WinForms только потому, что. – Cody Gray 06 фев. 11 2011-02-06 11:33:23

    4 ответа

    Есть ряд образца управления можно найти вокруг сети:

    Но все время любимое, вероятно, ObjectListView, которая обеспечивает расширяемые, несколько столбцов ListView, наряду со многими другими невероятно удобными функциями:

    Создан 06 фев. 11 2011-02-06 11:32:17 Cody Gray

    Привет, Коди, я только что загрузил ObjectListView перед тем, как увидел этот ответ, но по какой-то причине я не могу заставить его работать. Btw это использует VS2010 — чтобы проверить его, я создаю новый проект, добавьте ссылку на objectlistview.dll, добавьте элементы управления в панель инструментов, а затем скопируйте драпировку в виде списка наблюдения — ничего не делайте, кроме как пытаться запустить его и: – Vade 06 фев. 11 2011-02-06 12:14:45

    Предупреждение Связанная сборка «ObjectListView» не может быть разрешена, поскольку она имеет зависимость от «System.Design, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a», которая не находится в целевой среде «.NETFramework», Version = v4.0, профиль = Client». Удалите ссылки на сборки не в целевых рамках или не переустановите свой проект. \t WindowsFormsApplication9 + Тип пространства имен BrightIdeasSoftware не найден – Vade 06 фев. 11 2011-02-06 12:15:17

    @Vade: Да, это зависит от пространства имен ‘System.Design’, которое не является частью Framework профиля клиента.Однако VS 2010 создает новые проекты, ориентированные на профиль клиента по умолчанию, поэтому вам придется вручную его изменять. Перейдите в свои свойства проекта и перейдите на полную платформу .NET 4.0. Затем добавьте ссылку на ‘System.Design’ и перекомпилируйте. – Cody Gray 06 фев. 11 2011-02-06 12:19:13

    @ Vade: прокрутите вниз до второго заголовка (изменение существующего проекта) на [этой странице] (http://msdn.microsoft.com/en-us/library/bb398202.aspx) для пошаговых инструкций по как изменить целевую структуру. – Cody Gray 06 фев. 11 2011-02-06 12:20:32

    @ Коуди: Спасибо, мне удалось получить все, что работает сейчас :) всего лишь несколько вопросов с быстрым огнем: 1. При необходимости изменить цель, что-нибудь на клиентских компьютерах? на котором его запустить. 2. Я добавил элемент управления, в котором я добавил столбцы и некоторые фиктивные элементы и группы данных, но когда я его запустил, он просто показывает пустое поле с заголовками столбцов. есть идеи? Еще раз спасибо – Vade 06 фев. 11 2011-02-06 12:37:01

    Илон Маск рекомендует:  Что такое код enummetafile

    @ Vade: 1) Да, вам понадобится полная версия .NET Framework, а не профиль клиента. Это примерно на 15% больше, в значительной степени незначительно. Однако у вас нет большого выбора. ‘System.Design’ не находится в профиле клиента. 2) Вам необходимо прочитать документацию для ObjectListView. Компромисс для его власти заключается в том, что он не * точно * заменяет стандартные элементы управления ListView/TreeView. Вещи ведут себя немного по-другому, но документы очень хорошие. См. Раздел [Начало работы] (http://objectlistview.sourceforge.net/cs/gettingStarted.html). – Cody Gray 06 фев. 11 2011-02-06 12:54:53

    @Cody, После игры с этим компонентом, который я должен сказать, отлично. Я думаю, что мне, возможно, придется придерживаться базового дерева и не беспокоиться о столбцах, причина в том, что это приложение должно запускаться на компьютерах NHS на нескольких операциях, где я живу (Корнуолл), я не могу гарантировать, что они будут У вас установлен полный .NET. однако я буду определенно играть с ним еще несколько для будущих приложений. благодарю вас за вашу помощь. – Vade 06 фев. 11 2011-02-06 14:42:02

    @ Vade: вам действительно нужно развернуть приложение с помощью установщика (вы можете использовать Visual Studio для создания проекта установки без каких-либо проблем), и тогда не имеет значения, используете ли вы профиль клиента или полную версию , Вы не можете полагаться на * любые * компьютеры «в дикой природе», чтобы установить .NET 4.0. Он даже не был связан с версией Windows, и все мы знаем, что люди не обновляют свои компьютеры так, как должны. Но при необходимости использование отдельных элементов управления TreeView и ListView, вероятно, сделает то, что вам нужно. Просто синхронизируйте их, чтобы обновления ListView при нажатии на узел. – Cody Gray 06 фев. 11 2011-02-06 14:44:58

    @CodyGray +1 Я должен согласиться с вашим любимым. Сегодня я проверял несколько опций, и ObjectListView оказался самым последним из поддерживаемых (февраль 14) и наиболее полнофункциональным, что вы можете получить из свободно доступного элемента управления .NET WinForms. Он также хорошо скомпилирован для меня, используя мою текущую среду SharpDevelop. – πάντα ῥεῖ 26 авг. 14 2014-08-26 18:05:39

    Самая большая проблема, которую я вижу с ObjectListView, заключается в том, что она лицензируется под GPLv3. Почему, почему это не по крайней мере с LGPL? Делает это бесполезным, за исключением использования в лицензированных программах GPL. – kjbartel 21 апр. 15 2015-04-21 01:55:49

    Выпадающий jQuery.Treeview

    Вступление

    В ходе реализации текущего проекта мне понабилось выпадающее дерево. Так как я уже пользовался jQuery плагином TreeView, и его функционал меня устраивает, было принято решение cделать выпадающее дерево на его основе. В результате родился плагин DropDownTreeView которым я хочу поделится.

    Функционал

    Плагин позволяет создавать выпадающие деревья с AJAX загрузкой (пример). При создании дерева к объекту обертки добавляется кнопка открытия дерева, и подгружается дерево. Дерево можно подгружать как целиком так и частями (актуально для больших деревьев). HTTP запросы могут выполнятся POST и GET методами. Параметры HTTP запроса определяются пользователем. Дерево строится посредством jQuery.Treeview. Дерево сворачивается при выборе пункта и клике вне зоны дерева.

    Примеры использования с описанием

    1. Добавляем стили для jQuery.Treeview и jQuery.Treeview.DropDown

    link href =’jquery.treeview.css’ type =’text/css’ rel =’stylesheet’ >
    link href =’jquery.treeview.dropdown.css’ type =’text/css’ rel =’stylesheet’ />

    2. Добавляем скрипты jQuery, jQuery.Treeview и jQuery.Treeview.DropDown

    3. Добавляем HTML код для контейнера выпадающего TreeView.

    4. Загрузка дерева

    Формат вызова: $(selector).dropdowntreeview(param,option,TreeViewOption)
    где:

      param — параметры в формате JSON для запросов посредством AJAX

    Пример: attr= <'my_ >
    Примечание: имена параметров не должны совпадать с именами атрибутов тегов и с именами опций описанных в следующем пункте.

    option — настройки в формате JSON
    Возможные настройки:
    type — ‘post’ или ‘get’ (по умолчанию ‘post’)
    url — адрес для HTTP запроса дерева (ветки) (по умолчанию текущий адрес)
    width — ширина поля выбора (по умолчанию по ширине объекта к которому привязывается дерево)
    height — высота поля выбора (по умолчанию задана в CSS)


  • TreeViewOption — опции Treeview (http://docs.jquery.com/Plugins/Treeview/treeview)

  • 4.1. Код для подгрузки простейшего дерева.
    4.1.1. Добавляем JavaScript для загрузки простейшего дерева с адрeса «test.php» методом POST

    Примечание: первый параметр оставили пустым в связи с тем что никаких параметров с помощью запроса нам передавать не нужно.

    4.1.2. Код test.php:

    php
    // Простейшее дерево
    ? >
    ul class =»filetree» >
    li > span class =»file» > Пункт1 span > li >
    li > span class =»folder» > Пункт2 span >
    ul >
    li > span class =»file» > Подпункт1 span > li >
    li > span class =»file» > Подпункт2 span > li >

    li class =»closed» > span class =»folder» > Подпункт3 span >
    ul >
    li > span class =»file» > Подподпункт1 span > li >
    li > span class =»file» > Подподпункт2 span > li >

    li > span class =»file» > Подподпункт3 span > li >
    li > span class =»file» > Подподпункт4 span > li >

    ul >
    li >
    li > span class =»file» > Подпункт4 span > li >

    ul >
    li >
    li > span > Пункт3 span > li >

    Примечание: в маркированный список добавил классы “filetree”, “file”, “folder” для отображения пиктограмм файловой системы.

    4.2. Дерево загружаемое частями
    4.2.1. Добавляем JavaScript код, который подгрузит часть дерева посредством POST запроса test.php?t >

    script type =»text/javascript» >
    $( function () <
    $( ‘#dropdown’ ).dropdowntreeview(<‘t >true >);
    >) //$(function()
    script >

    Примечание: первый параметр — параметр передаваемый запросом, второй параметр — адрес для запроса, третий параметр – опция TreeView (показывать свернутым).

    4.2.2. Код test.php

    php
    // Загрузка дерева частями
    $ x =$ _POST [ ‘tid’ ];
    $ y =$ x + 1 ;
    $ z =’ ul class =»temp» > li class =»temp» > li > ul > ‘;
    ? >

    ul >
    li form =’portion’ tid =’ ? php echo $ y ; ? > ‘ >
    span > Пункт1- php echo $ x ; ? > span >
    php echo $ z ; ? >
    li >
    li form =’portion’ tid =’ ? php echo $ y ; ? > ‘ >
    span > Пункт2- php echo $ x ; ? > span >
    php echo $ z ; ? >
    li >
    li form =’portion’ tid =’ &#60 ;? php echo $ y ; ? > ‘ >
    span > Пункт3- php echo $ x ; ? > span >
    li >
    ul >

    Примечание: если у тега “li” есть потомки в виде тега “ul” и “li” c классом “temp” то он будет отображаться свернутым списком. При разворачивании этого списка на место тегов с классом “temp” загрузится новая часть списка с параметрами взятыми из одноимённых атрибутов тега “li” родителя.

    То есть при раскрытии первой ветви на место списка класса ‘temp’ погрузится список созданный по POST запросу test.php?t >

    Ссылки

    Вот вроде и всё. Надеюсь мой плагин кому-нибудь пригодится. Спасибо за внимание.

    Ctreelistctrl: простейший treeview с колонками

    TreeView представляет визуальный элемент в виде дерева. Дерево содержит узлы, которые представляют объекты TreeNode . Узлы могут содержать другие подузлы и могут находиться как скрытом, так и в раскрытом состоянии. Все узлы содержатся в свойстве Nodes .

    Если мы нажем в панели Свойств на свойство Nodes , то нам откроется окно редактирования узлов TreeView:

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

    BackColor : фоновый цвет узла

    Checked : если равно true, то данный узел будет отмечен флажком

    NodeFont : шрифт узла

    ForeColor : цвет шрифта

    Text : текст узла


    ImageIndex : получает или задает индекс изображения, выводимого для данного узла

    ImageKey : получает или задает индекс изображения для данного узла

    SelectedImageKey : получает или задает индекс изображения для данного узла в выбранном состоянии

    SelectedImageIndex : получает или задает индекс изображения, выводимого для данного узла в выбранном состоянии

    StateImageIndex : получает или задает индекс изображения состояния (например установленного или снятого флажка, указывающего состояние элемента)

    И затем все добавленные узлы мы сможем увидеть в приложении на форме:

    Кроме данных свойств, управляющих визуализацией, элемент TreeNode имеет еще ряд важных свойств, которые мы можем использовать к коде:

    FirstNode : первый дочерний узел

    LastNode : последний дочерний узел

    NextNode : возвращает следующий сестринский узел по отношению к текущему

    NextVisibleNode : возвращает следующий видимый узел по отношению к текущему

    PrevNode : возвращает предыдущий сестринский узел по отношению к текущему

    PrevVisibleNode : возвращает предыдущий видимый узел по отношению к текущему

    Nodes : возвращает коллекцию дочерних узлов

    Parent : возвращает родительский узел для текущего узла

    TreeView : возвращает объект TreeView, в котором определен текущий узел

    Программное управление узлами

    Рассмотрим программное добавление и удаление узлов:

    Скрытие и раскрытие узлов

    Для раскрытия узлов к объекту TreeNode применяется метод Expand() , а для скрытия — метод Collapse() :

    Добавление чекбоксов

    Чтобы добавить чекбоксы к узлам дерева, надо у TreeView установить свойство CheckBoxes = true :

    Добавление изображений

    Для добавления изображений нам нужен компонент ImageList, в котором имеется несколько картинок. Добавим эти картинки к узлам:

    При установке изображений надо учитывать, что если мы не установим свойство SelectedImageIndex для каждого узла, то в качестве картинки для выделенного узла по умолчанию будет использоваться первое изображение из ImageList.

    TreeView. Практический пример

    Выполним небольшую задачу с TreeView. А именно попробуем сделать примитивный интерфейс на подобие проводника. Для этого добавим на форму элемент TreeView. А в файле кода формы пропишим следующий код:

    TreeView имеет ряд событий, которые позволяют нам управлять деревом. Наиболее важные из них:

    BeforeSelect / AfterSelect : срабатывает перед / после выбора узла дерева

    BeforeExpand / AfterExpand : срабатывает перед / после раскрытия узла дерева


    BeforeCollapse / AfterCollapse : срабатывает перед / после скрытия узла дерева

    В вышеприведенном коде мы заблаговременно перед раскрытием или выбором наполняем выбранный узел дочерними подузлами, благодаря чему у нас появляется видимость, что узлы заполнены.

    Статья C# Как создать и добавить узел в TreeView

    Pirnazar

    Well-known member

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

    Создание узлов
    Каждый узел в элементе TreeView представляет собой объект класса TreeNode.

    Чтобы добавить созданный корневой узел в элемент TreeView его нужно поместить в коллекцию типа TreeNodeCollection, доступ к которой можно получить с помощью свойства Nodes.

    Для добавления новых элементов в коллекцию используются методы Add и AddRange.

    Метод Add позволяет не только добавлять новые узлы, но и создавать их. Например, корневой узел auto можно создать и добавить следующим образом:

    Создание и добавление дочерних узлов

    Любой узел, добавленный к уже существующему узлу дерева, называется дочерним.

    Давайте рассмотрим, как создать дочерний узел marka и добавить его к корневому узлу car.

    Далее рассмотрим, как работать с коллекцией Nodes элемента управления TreeView.

    В первом примере создадим и добавим всё тот же дочерний узел marka к корневому узлу car.

    В квадратных скобках указывается либо индекс элемента, либо его имя.

    Каждый узел в элементе TreeView хранит все дочерние узлы внутри всё той же коллекции типа TreeNodeCollection, доступ к которой также осуществляется с помощью свойства Nodes.

    Выше приведённый код можно сократить:

    В следующем примере создадим два дочерних узла и добавим их к узлу marka.

    К каждой марки автомобиля добавим по одной модели.

    Добавим ещё несколько моделей для каждой марки авто.

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

    К узлу x5 добавим два дочерних узла

    Добавим значения для узлов: speed и price.

    Теперь создадим и добавим один дочерний узел к модели Toyota Corona.

    Добавим два узла: speed и price для всех автомобилей марки Toyota.

    При добавлении одинаковых узлов лучше использовать цикл:

    Добавляем дочерний узел value для каждой модели марки Toyota.

    Ctreelistctrl: простейший treeview с колонками

    Дата публикации статьи: 17.01.2004 17:06

    Гайдар Магдануров
    Элементы управления .NET
    Работа с TreeView



    Эта статья начинает цикл коротких статей по работе с элементами управления .NET. Это достаточно странно, но именно работа со стандартными элементами отпугивает начинающих программистов. Я понимаю, насколько это сложно начинать свой путь к вершинам «программерского» искусства с такой системы, на первый взгляд сложной, как Visual Basic .NET . Поэтому-то я и начал этот цикл. К каждой статье прилагается пример, который сам по себе демонстрирует описываемые возможности и он должен служить основным источником информации — учится на примере всегда легче, чем читая что-то отвлеченное, пусть даже изобилующее кусками кода.
    Чаще всего задают вопросы по TreeView , с него и начнем. Давненько я не писал ничего для начинающих . Посмотрим, что получится на этот раз. So, let’s rock!

    Элемент TreeView предназначен для отображения древовидных структур, как, например, это делает Windows Explorer ( View | Explorer Bars | Folders ). Основным понятием этого элемента является узел — это каждая отдельная веточка, которая содержит ссылку на родительскую веточку ( parent ), при условии, что это не корневой узел, тогда ссылка на родителя равна Nothing, а также ссылки на коллекцию порожденных от него детей ( child ), для узла не имеющего детей эта коллекция пуста. Также каждый узел имеет свои свойства, независимые от других узлов, например такие как Text и Tag . Помимо свойств узлов, TreeView имеет и свои собственные свойства, описывающие то, как контрол отображается на форме, как себя ведет и вообще зачем он такой нужен.

    Основные используемые свойства узлов — это:

    • Text — текст, отображающийся в дереве
    • Tag — любые данные, которые вы хотите присвоить этому элементу — этому свойству может быть присвоен любой объект, например текстовая строка (учтите, все типы в .NET — объекты, подробнее смотрите статьи здесь), либо экземпляр вашего собственного класса, относящийся к этому узлу, либо даже связанный с ним контрол на форме — TextBox, CommandButton и т.д.
    • Parent — объект — родительский узел.
    • Nodes — массив порожденных узлов
    • ImageIndex — индекс картинки в массиве
    • IsExpanded — булево значение в зависимости от того — развернут ли узел или нет
    • IsVisible — булево значение в зависимости от того — видим узел или нет

    Вот пока и все. Приведу пример:

    Основные свойства TreeView :

    • CheckBoxes — отображать или нет «поля для установки галочек»
    • HotTracking — выделять или нет узел под курсором
    • ImageList — назначенный элемент ImageList
    • LabelEdit — разрешить ли редактирование узлов
    • SelectedNode — объект — выделенный узел
    • ShowLines — отображать или нет линии
    • ShowRootLines — отображать или нет «внешние линии»
    • ShowPlusMinus — отображать или нет картинку «плюс» или «минус».
    • Nodes — массив элементов, для которых родительским является сам объект TreeView.

    Самое часто и по делу используемое свойство — SelectedNode . Благодаря ему можно узнать на каком элементе остановил свой выбор пользователь и в соответствии с этим делать какие-либо действия.

    Основные события TreeView :

    • AfterCollapse — происходит после cворачивания узла
    • AfterExpand — происходит после разворачивания узла
    • AfterSelect — происходит после выбора узла

    События происходящие до (Before) нас не интересуют.

    Чтобы редактировать элемент надо сначала подумать, что собственно редактировать-то? Вероятно выделенный пользователем элемент нам изменять интереснее всего. С него и начнем.
    Прежде всего — пользователь выбирает элемент и вызывается обработчик события AfterSelect, если он, конечно, есть. После этого мы можем получить необходимый объект (и при желании «перебрать» его детей и родителей).
    Для наших действий нам понадобятся методы объекта TreeNode :

    Collapse — сворачивает узел

    Expand — разворачивает узел

    Remove — удаляет узел

    Toggle — если развернут — сворачивает, если свернут -. (вы догадались).

    Clone — создает копию

    GetNodeCount — возвращает количество детей у данного узла. Это метод имеет важный параметр IncludeSubTrees — учитывать ли в подсчете вложенные деревья.

    Соответственно мы можем поступать с узлом так, как нам хочется. Но чтобы получить доступ к его дочерним узлам нужно использовать свойство Nodes , как я уже говорил, это массив всех дочерних узлов. Этот массив также обладает всеми свойствами стандартного массива (на самом деле это не массив, а коллекция элементов, но о коллекциях мы поговорим в другой раз). Сейчас же нас интересуют лишь некоторые методы:

    Add — создает новый узел (в качестве параметра воспринимает строку — свойство Text нового узла, либо уже созданный объект TreeNode )

    Clear — очищает коллекцию элементов

    Remove — удаляет элемент (необходимо передать объект TreeNode )

    RemoveAt — удаляет элемент с индексом (необходимо передать объект Integer )

    Contains — проверяет принадлежит ли переданный в качестве параметра элемент данной коллекции

    Вот и все на этом. Это лишь краткое описание основных свойств, методов и понятий. За более подробной информацией следует обращаться к лучшему други и помошнику программиста — Object Browser ( Ctrl+Alt+J ).

    Я принимаю пожелания и предложения по тому о чем надо написать следующую статью. Мой адрес как всегда «не дом и не улица», а gaidar@vbstreets.ru.

    Благодарность

    Я очень благодарен своей любимой девушке за ценные замечания по данной статье. Помощь была действительно ценной, без нее в статье было бы несколько весьма темных моментов, которые я выпустил из вида. Спасибо тебе, любовь моя.

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL