Коллекция ArrayList ⇐ ПредыдущаяСтр 2 из 2
Класс ArrayList принадлежит пространству имен System.Collections.ArrayList и предназначен для хранения объектов произвольного типа. Основные свойства и методы класса ArrayListприведены в таблице 12.1 Таблица 12.1 Основные свойства и методы класса ArrayList
По умолчанию начальная емкость коллекции ArrayList составляет 16 элементов. При расширении коллекции ее емкость удваивается, составляя 32, 64, 128 и т. д. элементов. Метод TrimToSize() отсекает неиспользуемые элементы. Задача 12.1 Использовать класс ArrayList для организации коллекции «Гараж», объединяющей объекты «Автомобиль». Для работы с коллекцией использовать свойства и методы таблицы 12.1. Это чисто учебная программа, поэтому количество полей у объекта «Автомобиль» всего два – марка автомобиля и его цена. В учебных целях использован элемент управления TabControl – набор вкладок, с помощью которого реализовано как меню программы, так и «дополнительные формы» с элементами управления каждого режима меню. В программе использованы элементы управления Panel – панель как для размещения на них результатов работы программы, так и для «скрытия» или «открытия» результатов работы программы «на форме» – режим «Просмотр» команда «Просмотр графика цены». Особенность коллекции ArrayList является то, что коллекция предназначена для хранения объектов произвольного типа, поэтому некоторые методы из таблицы 12.1 требуют дополнительной настройки интерфейсных классов. Во время проверки программы, если число объектов коллекции не превышает 4, то по умолчанию начальная емкость коллекции равна 4, а не 16 как утверждается во многих учебника. При расширении коллекции емкость удваивается – 8 (если число объектов больше 4, но меньше 9), 16 и т.д. Исходный код программы: using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); textBox3.Text = ""; panel2.Visible = true; panel3.Visible = false; panel1.Visible = false; } public class Avto { public string Marka; public int Cena; public Avto(string sm, int sc) { Marka = sm; Cena = sc; } }; public ArrayList Garaj = new ArrayList(); private void button1_Click(object sender, EventArgs e) { panel2.Visible = true; panel3.Visible = false; panel1.Visible = false; string n; int c; n = textBox1.Text; c = Convert.ToInt32(textBox2.Text); Avto at = new Avto(n, c); Garaj.Add(at); } private void button2_Click(object sender, EventArgs e) { panel2.Visible = false; panel3.Visible = false; panel1.Visible = true; int i = 0; dataGridView1.Rows.Clear(); foreach (Avto at in Garaj) { dataGridView1.Rows.Add(); dataGridView1.Rows[i].Cells[0].Value = at.Marka; dataGridView1.Rows[i].Cells[1].Value = at.Cena; i++; } } private void button3_Click(object sender, EventArgs e) { panel2.Visible = false; panel3.Visible = false; panel1.Visible = false; this.Invalidate(); } private void button4_Click(object sender, EventArgs e) { panel2.Visible = false; panel3.Visible = true; panel1.Visible = false; int i = Garaj.Capacity; int j = Garaj.Count; textBox3.AppendText("Коллекция состоит из " + j.ToString()+ " элементов" + "\r\n"); textBox3.AppendText("Текущая размерность коллекции = " + i.ToString() +" элементов" + "\r\n"); } private void button5_Click(object sender, EventArgs e) { panel2.Visible = false; panel3.Visible = true; panel1.Visible = false; Avto at1 = new Avto("", 0); Avto at2 = new Avto("", 0); int i=0; foreach (Avto at in Garaj) { if (i==0) at1=at; at2 = at; i++; } int j = Garaj.Count; Garaj.RemoveAt(j-1); Garaj.RemoveAt(0); Garaj.Insert(0, at2); Garaj.Insert(j-1, at1); textBox3.AppendText("Обмен закончен" + "\r\n"); } private void button6_Click(object sender, EventArgs e) { Garaj.RemoveAt(0); panel2.Visible = false; panel3.Visible = true; panel1.Visible = false; textBox3.AppendText("Из коллекции удален 0 элемент"+"\r\n"); } private void Form1_Paint(object sender, PaintEventArgs e) { string ss; Graphics g = e.Graphics; Pen myPen = new Pen(Color.Red, 2); g.DrawLine(myPen, 50, 150, 50, 50); g.DrawLine(myPen, 50, 150, 250, 150); int h,i = 0; foreach (Avto at in Garaj) { h = at.Cena/100; if (i < 8) { g.FillRectangle(Brushes.Blue, i * 25 + 55, 150 - h, 20, h); ss = i.ToString(); g.DrawString(ss, new Font("10_IC_1", 12), Brushes.Black, (i + 1) * 25 + 30, 160); } i++; } } } } Работа программы:
Рисунок 12.2 – Окно запуска программы с рисунком
Рисунок 12.3 – Режим ввода данных коллекции
Рисунок 12.4 – Режим просмотра таблицы объектов коллекции
Рисунок 12.5 – Режим просмотра информации о коллекции
Рисунок 12.6 – Просмотр графика цен объектов коллекции
Как и во всех учебных программах в данном примере основное внимание уделялось технологии использования новых элементов управления и классов, а не «содержательной» стороне объектов этих классов. Некоторые значения цены или марки автомобилей взяты, что называется «с потолка».
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|