• Добро пожаловать на сайт - Forumteam.digital !

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

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

43. Работаем с элементом управления "дерево".

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Данный практический пример показывает принцип работы с деревом. На форме присутствует дерево и статик с картинкой. В дереве отображается дерево каталогов. При выборе конкретного файла с изображением в статике отображается изображение.А вот и код:
Код:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
namespace PictureBrowser
{
    ///

    /// Summary description for Form1.
    ///

    public class PictureBrowserForm : System.Windows.Forms.Form
    {
        // Переменная для статика с картинкой   
        private System.Windows.Forms.PictureBox image;
        // Переменная для первой информационной надписи
        private System.Windows.Forms.Label info;
        // Переменная для дерева   
        private System.Windows.Forms.TreeView catalogs;
        // Переменная для второй иноформационной надписи
        private System.Windows.Forms.Label info2;
        private System.ComponentModel.IContainer components;

        public PictureBrowserForm()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            // Подготовка элемента дерева( загрузка картинок )   
            PrepareTree();
            // Инициализация дерева названиями логических дисков   
            FillByDrives();
        }

        ///

        /// Clean up any resources being used.
        ///

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        ///

        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        ///

        private void InitializeComponent()
        {
            this.image = new System.Windows.Forms.PictureBox();
            this.info = new System.Windows.Forms.Label();
            this.catalogs = new System.Windows.Forms.TreeView();
            this.info2 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // image
            //
            this.image.Location = new System.Drawing.Point(328, 48);
            this.image.Name = "image";
            this.image.Size = new System.Drawing.Size(320, 288);
            this.image.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
            this.image.TabIndex = 0;
            this.image.TabStop = false;
            //
            // info
            //
            this.info.Location = new System.Drawing.Point(328, 8);
            this.info.Name = "info";
            this.info.TabIndex = 1;
            this.info.Text = "Изображение";
            //
            // catalogs
            //
            this.catalogs.ImageIndex = -1;
            this.catalogs.Location = new System.Drawing.Point(0, 48);
            this.catalogs.Name = "catalogs";
            this.catalogs.SelectedImageIndex = -1;
            this.catalogs.Size = new System.Drawing.Size(320, 288);
            this.catalogs.TabIndex = 2;
            this.catalogs.AfterSelect += new System.Windows.Forms.
TreeViewEventHandler(this.catalogs_AfterSelect);
            this.catalogs.BeforeExpand += new System.Windows.Forms.
TreeViewCancelEventHandler(this.catalogs_BeforeExpand);
            //
            // info2
            //
            this.info2.Location = new System.Drawing.Point(8, 8);
            this.info2.Name = "info2";
            this.info2.TabIndex = 3;
            this.info2.Text = "Дерево каталогов";
            //
            // PictureBrowserForm
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(656, 349);
            this.Controls.Add(this.info2);
            this.Controls.Add(this.catalogs);
            this.Controls.Add(this.info);
            this.Controls.Add(this.image);
            this.Name = "PictureBrowserForm";
            this.Text = "PictureBrowser";
           
            this.ResumeLayout(false);

        }
        #endregion

        ///

        /// The main entry point for the application.
        ///

       
        static void Main()
        {
            Application.Run(new PictureBrowserForm());
        }

        ///

        /// Данный метод выполняет предварительную инициализацию дерева каталогов
        ///

        // Инициализация дерева названиями логических дисков   
        private void PrepareTree()
        {
            try
            {
                //создание списка изображений
                imglist = new ImageList();
                // Добавление иконок в список изображений
                imglist.Images.Add(new Icon(GetType(),"CLSDFOLD.ICO"));
                imglist.Images.Add(new Icon(GetType(),"OPENFOLD.ICO"));
                imglist.Images.Add(new Icon(GetType(),"NOTE11.ICO"));               
                imglist.Images.Add(new Icon(GetType(),"NOTE12.ICO"));
                imglist.Images.Add(new Icon(GetType(),"Drive01.ico"));
                catalogs.ImageList = imglist ;
                // Переменная для стандартного рисунка(черный квадрат), который будет                         
// показываться тогда когда файл не яв    ляется рисунком
                bitmap = new Bitmap(GetType(),"nopicture.bmp");           
            }
            catch(Exception  ex)
            {
                MessageBox.Show(ex.Message,"Ошибка при работе со списком изображений",
MessageBoxButtons.OK,MessageBoxIcon.Error);
                Application.Exit();
            }
        }
        // Переменная для списка изображений   
        private ImageList imglist;
        // Переменная для стандартного рисунка
        private Bitmap bitmap;
        private void FillByDrives()
        {   
            // Метод для получения списка логических дисков
            string []drives = Directory.GetLogicalDrives();
            // Перебор списка дисков   
            foreach(string drive in drives)
            {
                // Создание конкретного узла и назначение иконок
                TreeNode node = new TreeNode(drive,4,4);
                // Добавили готовый узел к дереву   
                catalogs.Nodes.Add(node);
                // Заполнение узлов с дисками
                FillByDirectories(node);
            }
        }
        // Метод для заполнения узлов дерева содержимым каталога   
        private void FillByDirectories(TreeNode node)
        {
            try
            {
                // В node.FullPath - находится полный путь к ветке
                DirectoryInfo dirinfo = new DirectoryInfo(node.FullPath);
                // Получение информации о каталогах
                DirectoryInfo[] dirs = dirinfo.GetDirectories();
                // Обработка информации
                foreach(DirectoryInfo dir in dirs)
                {
                    TreeNode tree = new TreeNode(dir.Name,0,1);
                    // Присваиваем значение Dir, что для нас будет означать
                    // каталог
                    tree.Tag = "Dir";
                    node.Nodes.Add(tree);
                }
                // Получение информации о файлах
                FileInfo[] files = dirinfo.GetFiles();
                // Обработка информации
                foreach(FileInfo file in files)
                {
                    TreeNode tree = new TreeNode(file.Name,2,3);
                    // Присваиваем значение File, что для нас будет означать
                    // файл
                    tree.Tag = "File";
                    node.Nodes.Add(tree);
                }
            }
            // Исключение будет генерироваться  например для дисковода, если там нет
            // диска   
            catch
            {
            }
           
        }

        private void catalogs_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
        {
            // желательно вызывать при обновлении содержимого дерева
            catalogs.BeginUpdate();
            try
            {
                foreach(TreeNode node in e.Node.Nodes)
                {
                    if(node.Tag == "Dir")
                        FillByDirectories(node);
                }

            }
            catch
            {

            }
            // желательно вызывать при обновлении содержимого дерева
            catalogs.EndUpdate();
           
        }
        // Метод, отображающий картинку в статике   
        private void catalogs_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            if(e.Node.Tag=="File")
            {
                try
                {
                    // Картинка из файла   
                    image.Image = Image.FromFile(e.Node.FullPath);
                }
                catch
                {
                    // Картинка по умолчанию
                    image.Image = bitmap;
                }
            }

        }

    }
}
 
Сверху Снизу