Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Благодарности 14 страница






Редактирование свойств блокнота и страниц

После того как страницы будут добавлены, отредактируйте для каждой страницы свойство Text. Это свойство определяет название страницы. Назовите первую страницу SMTP, вторую POP3, а третью — IMAP. Таким образом, на первой странице мы будем редактировать параметры доступа к почтовому серверу SMTP, предназначенному для передачи почты, а на второй и третьей — параметры серверов POP3 и IMAP, предназначенных для приема почты.

Если теперь оттранслировать и запустить наше приложение, на экране появится блокнот с тремя пустыми страницами (рис. 6-32).

Рис. 6-32. Добавлены три страницы

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

 Top;

 Bottom;

 Left;

 Right

По умолчанию используется значение Top, в результате чего закладки располагаются в верхней части блокнота, как это показано на рис. 6-32. Если приравнять свойству Alignment значение Bottom, закладки появятся в нижней части блокнота (рис. 6-33). И, наконец, значения Left и Right предназначены для размещения закладок слева и справа от окна блокнота, соответственно.

Рис. 6-33. Изменение расположения закладок

Заметим, что после добавления страниц в блокнот Вы можете задавать по отдельности свойства блокнота и свойства отдельных страниц блокнота. Чтобы задать свойства блокнота, необходимо выделить весь блокнот, щелкнув левой клавишей мыши в области закладок. Для выделения одной из страниц блокнота откройте ее с помощью закладок, а затем щелкните левой клавишей мыши окно страницы блокнота.

Если выделить окно страницы, а затем изменить свойство BorderStyle этого окна на Fixed3D, то страница будет выделена объемной рамкой. На рис. 6-34 мы показали оформленную таким образом страницу SMTP, на которую также были добавлены некоторые элементы управления. Экспериментируя с приложением TabControlApp, попробуйте также использовать стиль, задаваемый константой FixedSingle.

Рис. 6-34. Изменение стиля страниц

Заметим, что использование элемента управления TabControl не требует от Вас написания какого-либо дополнительного программного кода. Создавая диалоговое окно настройки параметров, подобное окну, показанному на рис. 6-29, Вам достаточно разместить все необходимые элементы управления на соответствующих страницах блокнота, а затем создать для этих элементов управления обработчики событий. При этом Вы можете использовать приемы, описанные нами в 5 главе нашей книги с названием «Диалоговые окна».

Элемент управления ToolTip

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

На рис. 6-35 мы показали такую всплывающую подсказку около текстового поля, предназначенного для ввода доменного имени сервера SMTP.

Рис. 6-35. Всплывающая подсказка ToolTip

Добавление всплывающих подсказок

Чтобы снабдить элементы управления Вашего приложения всплывающими подсказками, Вам не придется написать ни одной строчки кода. Процедура добавления подсказок может быть выполнена исключительно средствами дизайнера форм системы Microsoft Visual Studio.NET.

Прежде всего, перетащите в окно формы из инструментальной панели Toolbox значок программного компонента ToolTip. Значок этого компонента toolTip1 появится в нижней части окна дизайнера формы (рис. 6-36).

Рис. 6-36. Добавлен программный компонент ToolTip

Теперь выделите левой клавишей мыши поле редактирования доменного имени сервера SMTP, как это показано на только что упомянутом рисунке. Далее в окне редактирования свойств Properties (рис. 6-37) введите текст подсказки в поле ToolTip on toolTip1.

Рис. 6-37. Добавление всплывающей подсказки

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

Настройка параметров всплывающих подсказок

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

Чтобы отредактировать эти свойства, выделите компонент toolTip1 левой клавишей мыши, а затем обратитесь к окну Properties (рис. 6-38).

Рис. 6-38. Редактирование свойств компонента toolTip1

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

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

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

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

И, наконец, если задать значение свойства ShowAlways, равным true, окна подсказок будут видны даже в том случае, если окно формы становится не активным.

Программный код

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

Программный компонент toolTip1 создается при помощи конструктора как объект класса System.Windows.Forms.ToolTip:

this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);

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

Если программист изменил свойства компонента toolTip1, заданные по умолчанию, дизайнер форм добавляет соответствующий код, например:

//
// toolTip1
//
this.toolTip1.AutomaticDelay = 300;

И, наконец, подключение того или иного текста подсказки к конкретному элементу управления выполняется с помощью метода toolTip1.SetToolTip, как это показано ниже:

//
// textBox6
//
this.textBox6.Location = new System.Drawing.Point(200, 96);
this.textBox6.Name = " textBox6";
this.textBox6.TabIndex = 9;
this.textBox6.Text = " ";
this.toolTip1.SetToolTip(this.textBox6,
" Введите свой идентификатор");

В качестве первого параметра методу toolTip1.SetToolTip передается ссылка на элемент управления, а в качестве второго — текст подсказки для этого элемента управления.

 

Визуальное проектирование приложений C#


А.В. Фролов, Г.В. Фролов

Глава 7. Многооконный пользовательский интерфейс.. 2

Использование фреймов.. 4

Создание главного окна приложения. 4

Добавление элемента управления TreeView.. 5

Добавление вертикального разделителя. 6

Добавление панели Panel 7

Добавление элемента управления ListView.. 7

Добавление горизонтального разделителя. 8

Добавление окна RichTextBox. 8

Элемент управления TreeView... 9

Инициализация дерева TreeView.. 9

Получение списка дисков. 9

Получение списка подкаталогов. 9

Метод DriveTreeInit 10

Метод GetDirs. 11

Обработчик события BeforeExpand. 12

Добавление значков к узлам дерева. 13

Создание списка изображений. 14

Подключение списка изображений к дереву. 15

Изменения в исходном тексте программы.. 15

Добавление флажков к узлам дерева. 16

Редактирование текста узлов дерева. 17

Список ListView... 18

Создание и настройка списка ListView.. 18

Режимы отображения. 18

Создание и настройка столбцов таблицы.. 18

Сортировка содержимого списка. 19

Подключение значков к списку. 19

Наполнение списка ListView.. 20

Алгоритм наполнения списка. 20

Обработчик события AfterSelect 21

Отображение содержимого текстовых файлов. 24

Приложения MDI 26

Меню Windows. 26

Системное меню MDI-окна. 27

Создание главного окна MDI-приложения. 27

Создание MDI-окон. 29

Шаблон MDI-окна. 29

Программный код для создания MDI-окна. 30

Упорядочивание MDI-окон. 31

Передача данных через буфер Clipboard. 32

Копирование данных в буфер Clipboard. 32

Вставка данных из буфера Clipboard. 33

 

Глава 7. Многооконный пользовательский интерфейс

Предыдущие главы нашей книги были посвящены созданию однооконных приложений, напоминающих по своему пользовательскому интерфейсу программу Microsoft Notepad. В этой главе мы расскажем Вам о проектировании приложений с многооконным пользовательским интерфейсом. Это приложения с фреймами (панелями), а также приложения с многооконным интерфейсом документов (Multiple-document interface, MDI).

В качестве примеров автономных приложений Microsoft Windows, реализующих многооконный интерфейс с фреймами можно привести Microsoft Explorer (рис. 7-1) и почтовую программу Microsoft Outlook Express, а также систему разработки Microsoft Visual Studio.NET.

Рис. 7-1. Главное окно программы Windows Explorer

В главном окне таких приложений находится несколько окон, между которыми имеется специальный элемент управления — разделитель. Передвигая разделитель мышью, пользователь может регулировать размеры упомянутых выше окон.

Технология фреймов очень часто используется и для создания Web-сайтов, имеющих сложную иерархическую структуру. На рис. 7-2 мы показали информационный сайт https://info.datarecovery.ru службы восстановления данных DataRecovery.Ru, в котором используются фреймы.

Рис. 7-2. Сайт информационного центра с фреймами

В левом фрейме отображается довольно развесистое дерево навигации, открывающее доступ к десяткам книг и статей, общий объем которых превышает несколько тысяч страниц. Это статьи, посвященные вопросам восстановления данных, антивирусной защиты и другим аспектам компьютерных технологий, полное собрание наших книг серий «Библиотека системного программиста» и «Персональный компьютер. Шаг за шагом», вышедших в издательстве «Диалог-МИФИ» (https://www.bitex.ru/~dialog), а также сведения о других наших книгах и работах.

Правый фрейм сайта предназначен для просмотра содержимого статей и книг, а верхний — для отображения логотипа службы восстановления данных DataRecovery.Ru.

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

Что же касается некогда широко распространенного многооконного интерфейса документов MDI, то ему следует такая известная программа, как редактор REGEDT32.EXE регистрационная база данных ОС Microsoft Windows (рис. 7-3).

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

Сейчас приложения с интерфейсом MDI вытесняются приложениями, имеющими современный пользовательский интерфейс на базе фреймов. Тем не менее, средства Microsoft.NET Framework позволят Вам при необходимости легко снабжать свои приложения и тем, и другим интерфейсом.

Рис. 7-3. Главное окно программы Registry Editor

В этой главе мы также расскажем Вам об использовании элементов управления TreeView и ListView, с помощью которых можно просматривать древовидные и списковые структуры данных. Такие элементы управления используются, например, в упоминавшейся выше программе Windows Explorer (рис. 7-1).

Использование фреймов

Изучение способов создания приложений с многооконным интерфейсом мы начнем с фреймов. Для реализации фреймов нам потребуется элемент управления Splitter, значок которого есть в инструментальной панели системы Microsoft Visual Studio.NET. Элемент управления Splitter представляет собой разделитель, предназначенный для регулирования размеров окна фрейма.

Специально для демонстрации способов создания приложений с фреймами мы вместе с Вами подготовим приложение FramesApp, действующее аналогично программе Microsoft Explorer. На примере этого приложения мы также изучим элементы управления TreeView и ListView.

Создание главного окна приложения

Создайте приложение FramesApp типа Windows Application, пользуясь мастером проектов (точно так же, как мы это делали ранее).

Добавьте в форму главного окна приложения меню и строку состояния. В меню File создайте строку Exit, предназначенную для завершения работы приложения (рис. 7-4).

Рис. 7-4. Главное окно приложения FramesApp с меню и строкой состояния

Пока наше приложение имеет обычный однооконный интерфейс. Нам нужно добавить в это окно фреймы и новые элементы управления.

Добавление элемента управления TreeView

Добавьте в окно нашего приложения элемент управления TreeView, перетащив мышью его значок из панели инструментов Toolbox в окно формы.

Установите значение свойства Dock, равным Left. Для этого щелкните левую кнопку в окне редактирования этого свойства (рис. 7-5).

Рис. 7-5. Настройка свойства Dock элемента управления TreeView

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

Рис. 7-6. Выравнивание элемента управления TreeView

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

В нашем приложении окно элемента управления TreeView будет использовано для отображения списка дисков и каталогов (аналогично дереву, расположенному в левой части главного окна приложения Windows Explorer).

Добавление вертикального разделителя

Снабдим элемент управления TreeView разделителем. Для этого перетащите значок элемента управления Splitter из панели инструментов Toolbox в окно формы.

Разделитель будет автоматически расположен справа от окна элемента управления TreeView (рис. 7-7).

Рис. 7-7. Добавление разделителя к элементу управления TreeView

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

Самое важное свойство разделителя Splitter — это свойство Dock, задающее его расположение. По умолчанию значение этого свойства равно Left, благодаря чему разделитель оказался «запаркован» слева от окна дерева TreeView. При необходимости можно изменять расположение разделителя с помощью окна редактирования, аналогичного окну, показанному на рис. 7-5.

Свойство BorderStyle позволяет задавать внешний вид разделителя и может иметь значения None (используется по умолчанию), FixedSingle и Fixed3D. В первом случае разделитель не имеет рамки, во втором случае используется тонкая рамка, а в третьем — трехмерная рамка.

Добавление панели Panel

В правой части главного окна приложения мы расположим два окна, разместив между ними разделитель. В верхнем окне будет находиться элемент управления ListView, показывающий список файлов и каталогов, а в нижнем — элемент управления RichTextBox, предназначенный для отображения дополнительной информации.

Для объединения окон элементов управления ListView и RichTextBox мы создадим панель на базе элемента управления Panel. Перетащите значок этого элемента управления из инструментальной панели Toolbox в окно нашей формы, а затем установите значение свойства Dock этой панели равным Fill. Последнее действие можно сделать, щелкнув кнопку, расположенную в центре окна редактирования данного свойства.

В результате наша панель будет расположена справа от разделителя и займет всю правую часть окна приложения (рис. 7-8).

Рис. 7-8. Добавление панели

Добавление элемента управления ListView

На следующем шаге мы добавим в окно нашего приложения элемент управления ListView, перетащив его значок из пиктограммы Toolbox. После установки значения свойства Dock, равным Top, и увеличения высоты окна этого элемента управления, главное окно нашего приложения примет вид, показанный на рис. 7-9.

Рис. 7-9. Добавление элемента управления ListView

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

Добавление горизонтального разделителя

Теперь нашей задачей будет добавление в правую часть главного окна горизонтального разделителя Splitter. Перетащите его пиктограмму из панели инструментов Toolbox в окно формы, а затем установите значение свойства Dock добавленного разделителя, равным Top.

В результате разделитель будет расположен непосредственно под окном элемента управления ListView, как это показано на рис. 7-10.

Рис. 7-10. Добавление горизонтального разделителя

Добавление окна RichTextBox

Последнее действие — добавление элемента управления RichTextBox. Перетащите его значок из панели Toolbox и установите значение свойства Dock, равным Fill.

Все! Теперь запускайте приложение на выполнение. На рис. 7-11 мы показали внешний вид его окна.

Рис. 7-11. Многооконный пользовательский интерфейс с формами реализован полностью

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

Заметим, что в некоторых случаях для достижения необходимого взаимного расположения окон Вам придется изменять расположение окон элементов управления по оси Z (Z-order). Это можно сделать с помощью строк Bring to Front и Send to Back контекстного меню. Это меню появляется на экране, если щелкнуть правой клавишей мыши окно элемента управления.

Элемент управления TreeView

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

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

Заметим, что вместе с классом TreeView мы будем использовать классы TreeNode и TreeNodeCollection. Первый из них содержит записи узлов дерева, а второй — контейнер с такими записями.

Инициализация дерева TreeView

Когда Вы перетаскиваете значок дерева TreeView из панели Toolbox в окно формы, создается объект treeView1 класса System.Windows.Forms.TreeView:

private System.Windows.Forms.TreeView treeView1;

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

Инициализация дерева выполняется в конструкторе класса Form1 с помощью подготовленного нами метода DriveTreeInit:

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//

DriveTreeInit();
}

Получение списка дисков

Ниже мы опишем исходный текст этого метода, а пока немного отвлечемся — расскажем о классах и методах, позволяющих получить информацию о дисках и каталогах. Более полную информацию по этому вопросу Вы найдете в [3].

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

string[]drivesArray = Directory.GetLogicalDrives();

foreach(string s in drivesArray)
Console.Write(" {0} ", s);

Этот метод не имеет параметров. После выполнения он возвращает ссылку на массив текстовых строк вида «C: \» с обозначениями всех доступных логических дисковых устройств.

Для обращения к этому методу, а также к другим методам, работающим с дисками, каталогами и файлами, подключите пространство имен System.IO:

using System.IO;

Получение списка подкаталогов

Для того чтобы получить список всех подкаталогов заданного каталога, мы используем метод GetDirectories класса DirectoryInfo. Ниже приведен фрагмент кода, позволяющий записать в массив diArray информацию обо всех подкаталогах корневого каталога диска C:

DirectoryInfo[] diArray;
string fullPath = " C: \\";

DirectoryInfo di = new DirectoryInfo(fullPath);

try
{
diArray = di.GetDirectories();
}
catch
{

}

Свойство Name элементов полученного таким способом массива будет содержать имя файла или каталога. Мы будем использовать это свойство для заполнения дерева.

Обратите внимание, что вызов метода GetDirectories необходимо выполнять в блоке try-catch, т.к. этот метод может вызывать исключения. Исключения возникают, например, если методу передается строка нулевой длины, если в строке имеется ошибка, если программа не обладает достаточными правами доступа для просмотра содержимого каталога или если указанный путь не найден.

Метод DriveTreeInit

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

Исходный текст этой функции Вы найдете ниже:

/// < summary>
/// Инициализация окна древовидного списка дисковых устройств
/// < /summary>
public void DriveTreeInit()
{
string[] drivesArray = Directory.GetLogicalDrives();

treeView1.BeginUpdate();
treeView1.Nodes.Clear();

foreach(string s in drivesArray)
{
TreeNode drive = new TreeNode(s, 0, 0);
treeView1.Nodes.Add(drive);

GetDirs(drive);
}


treeView1.EndUpdate();
}

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

Далее метод DriveTreeInit вызывает метод treeView1.BeginUpdate. Этот метод временно блокирует перерисовку окна дерева до тех пор, пока не будет вызван метод treeView1.EndUpdate. Пара этих методов используется в том случае, когда нужно добавить, удалить или изменить большое количество элементов дерева. Если не заблокировать перерисовку окна, на обновление дерева уйдет слишком много времени.

В классе TreeView определено свойство Nodes, хранящее все узлы дерева. Перед тем как приступить к заполнению дерева, метод DriveTreeInit удаляет все узлы, вызывая для этого метод treeView1.Nodes.Clear.

Заполнение дерева происходит в цикле:

foreach(string s in drivesArray)
{
TreeNode drive = new TreeNode(s, 0, 0);
treeView1.Nodes.Add(drive);

GetDirs(drive);
}

Напомним, что массив drivesArray содержит массив текстовых строк с обозначениями логических устройств, установленных в системе. Для каждого такого устройства в цикле создается объект класса TreeNode — узел дерева. В качестве первого параметра конструктору передается текстовая строка названия устройства. Остальные параметры мы рассмотрим позже.

Созданный узел добавляется в набор узлов дерева с помощью метода treeView1.Nodes.Add. В качестве параметра этому методу передается ссылка на объект TreeNode, т.е. на добавляемый узел.

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

Метод GetDirs

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

Вот исходный текст этого метода:

/// < summary>
/// Получение списка каталогов
/// < /summary>
public void GetDirs(TreeNode node)
{
DirectoryInfo[] diArray;

node.Nodes.Clear();

string fullPath = node.FullPath;
DirectoryInfo di = new DirectoryInfo(fullPath);

try
{
diArray = di.GetDirectories();
}
catch
{
return;
}

foreach (DirectoryInfo dirinfo in diArray)
{
TreeNode dir = new TreeNode(dirinfo.Name, 0, 0);
node.Nodes.Add(dir);
}
}

Первым делом метод GetDirs удаляет все элементы из текущего узла, вызывая для этого метод node.Nodes.Clear.

Далее метод переписывает в переменную fullPath типа string полный путь node.FullPath к узлу дерева. Эта строка получается объединением (конкатенацией) текстовых строк всех родительских узлов. Если корневой узел хранит текстовую строку обозначения логического диска, то после выполнения этой процедуры в переменной fullPath будет храниться полный путь к файлу или каталогу.

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

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

Далее содержимое массива diArray используется для заполнения узла дерева содержимым каталога:

foreach (DirectoryInfo dirinfo in diArray)
{
TreeNode dir = new TreeNode(dirinfo.Name, 0, 0);
node.Nodes.Add(dir);
}

Здесь в цикле создаются объекты класса TreeNode, т.е. узел дерева. В качестве первого параметра конструктору этого класса передается имя текущего элемента (каталога или файла) обрабатываемого каталога. Эти объекты добавляются в дерево рассмотренным ранее методом node.Nodes.Add.

Теперь если запустить нашу программу на выполнение, то в окне дерева появится список дисковых устройств (рис. 7-12).

Рис. 7-12. В окне дерева отображается список дисковых устройств

С этим списком, однако, есть одна проблема — узлы нашего дерева не раскрываются, сколько ни щелкай их мышью. Для ликвидации этой проблемы нам нужно обработать одно из событий, создаваемых элементом управления TreeView, а именно, события BeforeExpand.

Обработчик события BeforeExpand

Чтобы узлы дерева раскрывались, когда пользователь щелкает их мышью или пытается раскрыть при помощи клавиатуры, нам нужно обрабатывать событие BeforeExpand.

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

Рис. 7-13. Добавление обработчика события BeforeExpand

Далее в поле BeforeExpand ведите имя обработчика событий treeView1_OnBeforeExpand.

После этого добавьте в этот обработчик событий следующий код:

private void treeView1_OnBeforeExpand(object sender,
System.Windows.Forms.TreeViewCancelEventArgs e)
{
treeView1.BeginUpdate();

foreach(TreeNode node in e.Node.Nodes)
{
GetDirs(node);
}

treeView1.EndUpdate();
}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.