- Автор темы
- #1
Список и Выпадающий список.
Сейчас настало время вспомнить дела давно минувших дней. А именно вернуться назад к двум волшебным элементам управления Списку(ListBox) и Выпадающему Списку(ComboBox). Вы имеете опыт работы с ними в Visual C++ 6.0 , мы же рассмотрим их в контексте C#.
Список
Этот элемент как и многие другие наследуется от базового класса Control.Это легко доказать просто взглянув на иерархию наследования
Как вы уже наверняка поняли из иерархии за список отвечает класс ListBox, который также находится в пространстве System.Windows.Forms.Большинство своих методов и свойств он получает из базового класса Control. Рассмотрим те его части, которые используются в практическом примере.
Свойство Items
Данное свойство является одним из важнейших свойств. Оно возвращает ссылку на массив значений расположенных в списке. Это ссылка имеет тип данных ObjectCollection . Это класс с помощью методов, которого можно добавлять, удалять и т.п. значения в списке. Рассмотрим несколько методов этого класса.
Свойство SelectedItem
Свойство SelectedItems
Свойство SelectedIndex
Свойство SelectedIndices
Выпадающий список
У списка и выпадающего списка достаточно много общего. За выпадающий список отвечает класс ComboBox.Рассмотрим иерархию наследования для этого класса:
Иерархия ComboBox схожа с ListBox. Всё что сказано было выше о ListBox верно и для ComboBox. У комбо-бокса добавились ещё некоторые методы. Например:
Для более детального ознакомления с методами этих классов воспользуйтесь MSDN.
Практический пример на элементы управления.
Данная программа позволяет проанализировать содержимое выбранной директории на предмет наличия JPEG-файлов. В случае обнаружения файлы заносятся в список, а при выборе файлы из списка, изображение показывается на форме.
Сейчас настало время вспомнить дела давно минувших дней. А именно вернуться назад к двум волшебным элементам управления Списку(ListBox) и Выпадающему Списку(ComboBox). Вы имеете опыт работы с ними в Visual C++ 6.0 , мы же рассмотрим их в контексте C#.
Список
Этот элемент как и многие другие наследуется от базового класса Control.Это легко доказать просто взглянув на иерархию наследования
Код:
Object
MarshalByRefObject
Component
Control
ListControl
ListBox
Как вы уже наверняка поняли из иерархии за список отвечает класс ListBox, который также находится в пространстве System.Windows.Forms.Большинство своих методов и свойств он получает из базового класса Control. Рассмотрим те его части, которые используются в практическом примере.
Свойство Items
Данное свойство является одним из важнейших свойств. Оно возвращает ссылку на массив значений расположенных в списке. Это ссылка имеет тип данных ObjectCollection . Это класс с помощью методов, которого можно добавлять, удалять и т.п. значения в списке. Рассмотрим несколько методов этого класса.
Код:
public int Add(
object item
);
Данный метод добавляет ещё один объект в коллекцию.
item - это добавляемый объект.Из этого метода возвращется индекс добавленного элемента.
public void Remove(
object value
);
Удаляет указанный объект из коллекции.
value - это объект для удаления
public void RemoveAt(
int index
);
Удаление по позиции.
index - это позиция элемента для удаления
public virtual void Clear();
Целиком очищает коллекцию
Свойство SelectedItem
Код:
public object SelectedItem {get; set;}
Данное свойство предоставляет доступ к выбранному элементу списка на чтение,запись
Свойство SelectedItems
Код:
public ListBox.SelectedObjectCollection SelectedItems {get;}
Данное свойство аналогично предыдущему, отличие состоит в том что оно применяется для списка с
многострочной выборкой.
Свойство SelectedIndex
Код:
public override int SelectedIndex {get; set;}
Данное свойство даёт доступ к индексу текущей выбранной строки на чтение,запись.
Свойство SelectedIndices
Код:
public ListBox.SelectedIndexCollection SelectedIndices {get;}
Данное свойство аналогично предыдущему.Отличие в доступе к коллекции индексов(для многострочной выборки)
Выпадающий список
У списка и выпадающего списка достаточно много общего. За выпадающий список отвечает класс ComboBox.Рассмотрим иерархию наследования для этого класса:
Код:
Object
MarshalByRefObject
Component
Control
ListControl
ComboBox
Иерархия ComboBox схожа с ListBox. Всё что сказано было выше о ListBox верно и для ComboBox. У комбо-бокса добавились ещё некоторые методы. Например:
Код:
public bool DroppedDown {get; set;}
Свойство, которое даёт доступ на ракрытие(закрытие) выпадающего списка.Либо на получение информации
о том закрыт он или открыт.
Для более детального ознакомления с методами этих классов воспользуйтесь MSDN.
Практический пример на элементы управления.
Данная программа позволяет проанализировать содержимое выбранной директории на предмет наличия JPEG-файлов. В случае обнаружения файлы заносятся в список, а при выборе файлы из списка, изображение показывается на форме.
Код:
using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Images
{
///
/// Summary description for Form1.
///
public class Form1 : System.Windows.Forms.Form
{
// Переменная класс для хранения пути к текущей строки
private String CurrentPath;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label label2;
///
/// Required designer variable.
///
private System.ComponentModel.Container components = null;
public Form1()
{
CurrentPath = "";
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// 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.listBox1 = new System.Windows.Forms.ListBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label2 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.HorizontalScrollbar = true;
this.listBox1.Location = new System.Drawing.Point(0, 88);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(248, 225);
this.listBox1.TabIndex = 0;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Location = new System.Drawing.Point(0, 24);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(248, 21);
this.comboBox1.TabIndex = 1;
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// label1
//
this.label1.Location = new System.Drawing.Point(0, 56);
this.label1.Name = "label1";
this.label1.TabIndex = 2;
this.label1.Text = "Пути к картинкам";
//
// button1
//
this.button1.Location = new System.Drawing.Point(176, 328);
this.button1.Name = "button1";
this.button1.TabIndex = 3;
this.button1.Text = "Выход";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(0, 328);
this.button2.Name = "button2";
this.button2.TabIndex = 4;
this.button2.Text = "Обзор";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(320, 56);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(184, 256);
this.pictureBox1.TabIndex = 5;
this.pictureBox1.TabStop = false;
//
// label2
//
this.label2.Location = new System.Drawing.Point(0, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(100, 16);
this.label2.TabIndex = 7;
this.label2.Text = "История";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(520, 357);
this.Controls.Add(this.label2);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.label1);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.listBox1);
this.Name = "Form1";
this.Text = "Картинки";
this.ResumeLayout(false);
}
#endregion
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
// Метод с помощью, которого происходит выход из приложения.
// Это обработчик нажатия на кнопку "Выход"
private void button1_Click(object sender, System.EventArgs e)
{
// Метод для выхода
Application.Exit();
}
//Обработчик нажатия на кнопку "Обзор"
private void button2_Click(object sender, System.EventArgs e)
{
// Создание объекта диалога выбора папки
FolderBrowserDialog dlg = new FolderBrowserDialog();
// Убираем кнопку "Новая Папка".
// С Помощью неё можно создать новую папку
dlg.ShowNewFolderButton = false;
// Показ диалога и проверка была ли нажата кнопка
if(dlg.ShowDialog()==DialogResult.OK)
{
// Сохраняем полученный путь к директории
CurrentPath = dlg.SelectedPath;
try
{
// Метод, заполняющий список названиями файлов
// из выбранной директории с расширением .jpg
// Если в директории есть файлы, подходящие под маску
// список заполняется их названиями,а в выпадающий список
// попадает путь к папке
if(FillListBox()==true)
this.comboBox1.Items.Add(dlg.SelectedPath);
}
catch(Exception ex)
{
MessageBox.Show("Произошла ошибка "+ex.Message);
}
}
}
// Обработчик изменения индекса выбранного элемента в списке
// При выборке нового элемента его изображение показывается в статическом элементе
private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
// Проверка корректности индекса
if(listBox1.SelectedIndex>=0)
{
// Задание новой картинки для статика
// this.pictureBox1.Image - Image - свойство static, задаёт картинку
// Image - название класса работающего с изображениями
// Метод FromFile - позволяет загружать изображение с диска
// Метод GetThumbnailImage получает картинку требуемого размера
this.pictureBox1.Image = Image.FromFile(CurrentPath+"\\"+listBox1.SelectedItem.ToString()).GetThumbnailImage(this.pictureBox1.Width,this.pictureBox1.Height,null,IntPtr.Zero);
}
}
//Обработчик изменения выборки в выпадающем списке
private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(this.comboBox1.SelectedIndex>=0)
{
// Получаем новый текущий путь
CurrentPath = this.comboBox1.SelectedItem.ToString();
// Заполняем список
FillListBox();
}
}
// Функция заполнения списка названиями файлов из выбранной директории
private bool FillListBox()
{
// Создание объекта директории
DirectoryInfo dir = new DirectoryInfo(CurrentPath);
// Запускаем фильтр на файлы
FileInfo[] ar = dir.GetFiles("*.jpg");
// Проверка на отсутствие найденных данных
if(ar.Length==0)
{
MessageBox.Show("Ничего не найдено !!!");
return false;
}
// Очистка списка от предыдущих занчений
this.listBox1.Items.Clear();
// Проход по полученной коллекции файлов
foreach(FileInfo temp in ar)
{
// Добавление нового элемента в список
listBox1.Items.Add(temp.Name);
}
return true;
}
}
}