Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Список и Выпадающий список.

Сейчас настало время вспомнить дела давно минувших дней. А именно вернуться назад к двум волшебным элементам управления Списку(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;

		}
	}
}


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru