Остановки и удаления
Этот этап предпоследний. Добавим в дочернее окно управляющий элемент-список для выбора нужного номера автомобиля. Добавим кнопку остановки/возобновления перерисовки окна, а также кнопку удаления выбранного в списке автомобиля. Реализация этого этапа представлены в примерах 5.3.4.1, 5.3.4.2 и 5.3.4.3. Пример 5.3.4.1. Реализация четвертого этапа разработки Avtos–приложения на языке С#. using System; using System.Drawing; using System.Windows.Forms; using System.Threading; using System.Collections;
public delegate void delEv();
public class Avto { … }
class Avtos: Form { … ListBox listBoxNum;//список номеров машин private Button del, ok;// ссылки на кнопки
public Avtos()//конструктор { …
ok = new Button();//создать кнопку приостановки ok.Text = "Stop";//именовать кнопку ok.Size = new Size(45, 30);//размеры кнопки ok.Location = new Point(5, 10);//поместить кнопку в окне ok.Click += new EventHandler(OK);//подписать обработчик f.Controls.Add(ok);//поместить объект ок в контейнер окна
listBoxNum = new ListBox();//создать элемент списка номеров listBoxNum.Location = new Point(140, 10);//разместить в окне listBoxNum.Size = new Size(60, 70);//установить размер f.Controls.Add(listBoxNum);//поместить в контейнер окна del = new Button();//создать кнопку удаления машин del.Text = "Del";//именовать кнопку del.Size = new Size(40, 30);//установить размер del.Location = new Point(90, 10);//поместить кнопку в окне del.Click += new EventHandler(DEL);//подписать обработчик f.Controls.Add(del);//поместить объект del в контейнер окна }
//приостановить или возобновить поток перерисовки Private void OK(Object obj, EventArgs arg) { IEnumerator inum = al.GetEnumerator(); While (inum.MoveNext()) { //перебрать список объектов машин Avto a = (Avto)inum.Current; if (run) { a.Suspend(); ok.Text = "Start"; } else { a.Resume(); ok.Text = "Stop"; } } run =!run; }
//создать автомобиль и включить его в список public void ADD(Object obj, EventArgs arg) { … ListBoxNum.Items.Add(num); al.Add(b); IEnumerator inum = al.GetEnumerator(); while (inum.MoveNext()) { Avto q = (Avto)inum.Current; q.evSpecial += new delEv(this.HandlerEvSpecial);
} }
//обработать нажатие кнопки удаления машины Private void DEL(Object o, EventArgs e) { if (listBoxNum.SelectedIndex == -1) { MessageBox.Show("Выделите номер" + "\n удаляемого объекта"); } Else { int numSel = (int)listBoxNum.SelectedItem; listBoxNum.Items.Remove(numSel);//Удалить из списка IEnumerator inum = al.GetEnumerator(); While (inum.MoveNext()) { Avto a = (Avto)inum.Current; if (a.N == numSel) {//объект с указанным номером найден a.Finish();//завершить поток al.Remove(a);//удалить из списка
|