- Автор темы
- #1
Данный практический пример показывает принцип работы с деревом. На форме присутствует дерево и статик с картинкой. В дереве отображается дерево каталогов. При выборе конкретного файла с изображением в статике отображается изображение.А вот и код:
Код:
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;
}
}
}
}
}