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

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

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

39. Про список.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.343
Реакции
8.371
Баллы
1.200
FTC
203¢
Список и Выпадающий список.
Сейчас настало время вспомнить дела давно минувших дней. А именно вернуться назад к двум волшебным элементам управления Списку(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;

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