Путь разработчика    

Перечислить узлы TreeView в C#


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

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

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

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

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

// Вернуть узлы в этой коллекции и их потомках.
public static IEnumerable Descendants(
    this TreeNodeCollection nodes)
{
    foreach (TreeNode node in nodes)
    {
        yield return node;
        foreach (TreeNode child in node.Nodes.Descendants())
        {
            yield return child;
        }
    }
}

// Вернем этот узел и его потомков.
public static IEnumerable Descendants(this TreeNode node)
{
    yield return node;
    foreach (TreeNode child in node.Nodes.Descendants())
    {
        yield return child;
    }
}

Первый (синий) метод работает на TreeNodeCollection. Он перемещается по узлам в коллекции и вызывает второй (красный) метод для каждого.

Первый (синий) метод работает на TreeNodeCollection. Он проходит через узлы в коллекции и дает каждому узлу перечисление. Затем он вызывает второй (красный) метод для коллекции Nodes каждого узла, чтобы перечислять потомки узла. Он перемещается по возвращенным узлам и дает их.

Второй (красный) метод работает с одним TreeNode. Сначала он дает узел. Затем он использует первый (синий) метод для перечисления потомков узла. Он пересекает потомков и дает их.

В этом выражается общая жалоба на инструкцию yield. Нет простого способа вернуть результаты другого метода IEnumerable. Вместо этого вам нужно выполнить итерацию и вернуть каждое из значений по отдельности.

В этом примере также определяется следующий метод расширения для элемента управления TreeView.

// Возвращает все узлы TreeView.
public static IEnumerable Descendants(this TreeView trv)
{
    foreach (TreeNode node in trv.Nodes.Descendants())
        yield return node;
}

Этот метод просто вызывает предыдущий (синий), чтобы перечислять узлы TreeView в коллекции Nodes элемента управления.

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

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

// Список проверочных TreeNodes.
private void btnShowChecked_Click(object sender, EventArgs e)
{
    string results = "";
    foreach (TreeNode node in trvMeals.Descendants())
    {
        if (node.Checked) results += node.Text + "
";
    }
    MessageBox.Show(results);
}

Этот код использует последний (зеленый) метод расширения для перечисления узлов элемента управления. Если узел проверен, он добавляет его в строку. Когда это будет завершено, программа отобразит строку.

Источник: http://csharphelper.com/blog/2017/04/enumerate-treeview-nodes-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Нарисуйте заполненную кривую хризантемы в C#

Этот пример очень похож на Нарисовать кривую хризантемы в C# кроме того, он рисует заполненную кривую хризантемы. Он заполняет кривую, окрашивая треугольни...

15 12 2019 23:39:20

Класс InputStreamReader в Java

Класс InputStreamReader считывает символы из байтового входного потока. Он считывает байты и декодирует их на символы с использованием указанной кодировки....

14 12 2019 6:51:49

Что такое __init__.py для Python?

Python обеспечивает очень простую систему упаковки, которая представляет собой просто расширение механизма модуля в каталог. Любая директория с файлом __in...

13 12 2019 7:56:20

Как установить максимальное использование памяти для JVM?

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

12 12 2019 20:30:14

Расположите форму в нижнем правом углу экрана в C#

Свойство Screen.PrimaryScreen.WorkingArea дает размер рабочей области основного экрана. ( Для получения дополнительной информации см. Получить рабочую облас...

11 12 2019 5:57:27

Как использовать ProgressBar в C#

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

10 12 2019 6:29:13

Перезапустите диспетчер очереди печати в C#

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

09 12 2019 8:14:58

Обработка XML-файлов Python

Что такое XML? XML означает расширяемый язык разметки . Стандарт XML - это гибкий способ создания информационных форматов и электронного обмена структуриро...

08 12 2019 12:22:22

Анимация проблемы Башни Ханоя в C#

Следующий метод AnimateMovement перемещает диск по прямой линии из текущего местоположения в новый. Код вычисляет количество пикселей в секунду, которое он...

07 12 2019 16:28:18

Метод Substring в C#

Метод Substring в строке C#. Класс возвращает новую строку, которая является подстрокой этой строки. Подстрока начинается с указанного заданного индекса и...

06 12 2019 16:29:35

Лутц М. Программирование на Python. Том 1 (4-е издание, 2011)

  Монументальный труд Марка Лутца « Программирование на Python» в 2-х томах представляет собой учебник по применению языка Python для решения наиболее типичн...

05 12 2019 3:30:36

Что такое поток Daemon в Java

Демон-поток - это поток поставщика услуг, который предоставляет услуги пользовательскому потоку. Демона, который работает в фоновом режиме и в основном соз...

04 12 2019 6:14:51

Использование значений равенства для сравнения объектов шрифта в C#

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

03 12 2019 12:11:36

Понимание символа "@" в C#

Символ @ может быть довольно запутанным для некоторых разработчиков C. Я даже знал некоторых, кто программировал довольно долгое время, но у которых все ещ...

02 12 2019 8:41:32

Как создать инвентарь в Unity 5 при помощи UI с выбором предмета

В этом уроке мы разберем как создать инвентарь для RPG игр (или их подобрых) с выбором предмета в Unity 5 при помощи UI. И реализуем их динамическую выгруку...

01 12 2019 1:36:50

Что такое docstring в Python?

Строки документации Python (или docstrings) обеспечивают удобный способ связывания документации с модулями, функциями, классами и методами Python. Как вы м...

30 11 2019 19:50:11

Использование памяти дисплея в C#

Эта программа отображает общее и бесплатное использование физической, виртуальной и файловой памяти компьютера. Когда он запускается, следующий код отображ...

29 11 2019 3:25:45

PHP: обучение на примерах (А. Кухарчик)

Книга предназначена прежде всего для начинающих, но может быть полезна и опытным программистам, использующим Р Н Р. Просто и доступно изложены основы Р Н Р — п...

28 11 2019 1:51:58

Что такое сборщик мусора в Java?

Для многих программистов управление памятью Java является одной из наиболее привлекательных функций, потому что Java-программисту никогда не приходится име...

27 11 2019 0:26:24

Файлы в каталоге автозагрузки в C#

В некоторых программах вы можете найти файлы, которые были установлены с программой. Один из способов сделать это - поместить файлы в каталог установки про...

26 11 2019 5:42:20

Используйте объект ImageAttributes для преобразования изображения в оттенки красного, зеленого или синего в C#

В этом примере используются методы, описанные Используйте объект ImageAttributes для настройки яркости изображения на C# , чтобы преобразовать изображение...

25 11 2019 15:41:24

Рекурсивно выполнять уменьшение эффекта «красных глаз» на изображении в C#

Пример Выполнение эффекта красных глаз на picture в C# исследует пиксели в выбранном прямоугольнике и преобразует любой пиксель, который является более кра...

24 11 2019 14:33:56

Целевое окно, как минимизировать, увеличить или восстановить его в C#

Это первая в серии записей, которая позволяет одному приложению манипулировать целевым окном в другом приложении. Обратите внимание, что это не то, что Mic...

23 11 2019 22:10:47

Программирование на Java и С# для студента (О. В. Герман, Ю. О Герман)

Рассмотрены основные вопросы программирования на языках JAVA и С#, включая их сравнительное описание как двух важнейших и весьма сходных прикладных платфор...

22 11 2019 13:25:50

Нарисуйте круговую диаграмму в C#

В этом примере показано, как рисовать круговую диаграмму, используя методы, описанные в сообщении Залить и нарисовать кусочки пирога в C# . В этом примере...

21 11 2019 2:49:13

PHP 5 для начинающих (Дэйв У. Мерсер, Аллан Кент, Стивен Д. Новицки)

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

20 11 2019 15:24:57

Использование обработчика событий для нескольких элементов управления в C#

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

19 11 2019 10:20:19

Как сделать класс с определением и повышением событий в C#

В этом примере используется класс BankAccount для управления банковским счетом (и для определения способов и событий события). Если программа пытается удал...

18 11 2019 11:35:36

Выделение текста в программе WPF с использованием C#

Обычно для отображения текста в WPF вы используете какой-то объект, такой как Label или TextBlock, но при необходимости вы можете нарисовать текст самостоя...

17 11 2019 16:29:43

Hashtable в Java

Hashtable - это структура данных, используемая для реализации ассоциативного массива, структуры, которая может сопоставлять ключи со значениями. Он может о...

16 11 2019 5:48:36

Разница между абстрактным классом и интерфейсом в Java

Термин « Абстракция» означает скрытие внутренней реализации функции и только отображение функциональности для пользователей. Это означает, что абстрактный к...

15 11 2019 12:50:15

Как использовать FTP в Python

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

14 11 2019 12:34:23

7 практических занятий по программированию в 1С 8.хх (Клюев В.В.)

7 практических занятий по программированию в 1 С 8.хх это пособие для освоения программирования и конфигурирования в системе 1 С: Предприятие 8.хх, на основе...

13 11 2019 2:32:52

Как использовать глобальную переменную в модулях python

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

12 11 2019 21:40:48

Уникальные слова в файле Microsoft Word в C#

Этот пример является модификацией более раннего сообщения Перечислить уникальные слова в файле Microsoft Word на C# . Эта программа считывает слова в текст...

11 11 2019 0:26:58

Список всех файлов в папке в Java

Как читать все .txt-файлы в папке Подсчет количества файлов в каталоге с помощью Java Источник: http://net-informations.com/Java/files/folder.htm...

10 11 2019 14:21:17

Безопасное управление документами на C#

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

09 11 2019 16:38:18

Графические популяции комаров в C#

Пример Имитировать популяции комаров в C# имитирует популяцию комаров. Этот пример рисует график, показывающий популяцию в течение каждого поколения. Когда...

08 11 2019 10:18:37

Список всех файлов в папке в Java

Как читать все .txt-файлы в папке Подсчет количества файлов в каталоге с помощью Java Источник: http://net-informations.com/Java/files/folder.htm...

07 11 2019 7:57:25

PHP и MySQL. Исчерпывающее руководство (Бретт Маклафлин)

Если у вас есть опыт разработки сайтов с помощью CSS и Javascript, то эта книга переведет вас на новый уровень веб-разработки — создание динамических веб-с...

06 11 2019 15:22:18

Сделать меню во время выполнения для приложения WPF в C#

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

05 11 2019 23:10:43

В чем смысл System.out.println в Java?

System.out.println - это оператор Java, который печатает переданный аргумент, в System.out, который обычно является stdout. System - класс out - это переме...

04 11 2019 10:30:21

PHP и MySQL. Исчерпывающее руководство (Бретт Маклафлин)

Если у вас есть опыт разработки сайтов с помощью CSS и Javascript, то эта книга переведет вас на новый уровень веб-разработки — создание динамических веб-с...

03 11 2019 15:51:46


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69