Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > .NET
Перезагрузить страницу Список и кнопки
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Максим1552 Максим1552 вне форума
Новичок
 
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 25.11.2013
Exclamation Список и кнопки - 03.12.2013, 20:09

В прикладном окне ездят несколько машин, которые движутся по кольцевой дороге.
Есть проблема с кнопками.
В класс пользователя написал Delete и Add предварительно создав список carslist.Кнопка Delete появилась,но не совершается никаких действий,видимо т.к. нет машин в списке.
Add выдает ошибку в строке (pCar[i].ev += new delEv(HandlerEv)
error CS0122: 'KURSOVAYA.Cars.HandlerEv()' is inaccessible due to its protection level.

csharp Код:
using System;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Drawing;
using System.Collections.Generic;


namespace KURSOVAYA
{

    delegate void delEv();

    class Car //класс машины
    {
        public event delEv ev;
        int num;              //номер машины
        int speed;            //скорость машины
        int r;                //радиус кольца
        string name;          //имя машины
        int x, y;//текущая позиция машины
        bool great,           //признак движения по большому кругу
             life;            //жизнь потока
        Thread t1;            //поток
        bool run;

        public Car(int N, string Name, int X, int Y, bool greatNew)
        {
            num = N;
            name = Name;
            speed = 2;
            x = X;
            y = Y;
            great = greatNew;
            run = false;//
            life = false;//
            Start();// 
            //great = true;
            //life = true;
            //t1 = new Thread(new ThreadStart(Move));
            //t1.Start();
        }
//---------------------------------------------------
            ~Car () {life= false;}    // Деструктор
       
        public void Start()        // Стартовать
        {
            if (!run)
            {
                run = true;
                life = true;
                t1 = new Thread(new ThreadStart(Move));
                t1.Start();
            }
        }
       
        public void Suspend()   // Приостановить
        {
            if (run)
            {
                run = false;
                t1.Suspend();
            }
        }

        public void Resume()    // Возобновить
        {
            if (!run)
            {
                run = true;
                t1.Resume();
            }
        }
//--------------------------------------
        public int N
        {
            get
            {
                return num;
            }
        }
        public int X            //свойство координаты X центра машины
        {
            get
            {
                return x;
            }
        }
        public int Y            //свойство координаты Y центра машины
        {
            get
            {
                return y;
            }
        }


        int counter;       // время существования
        void Move()        //движение
        {
            while (life)
            {
                counter++;
                if (great) OnCirclebigroad();
                if (!great) OnCirclesmallroad();
                if (ev != null)
                    ev();
                Thread.Sleep(100);
            }
        }

        void OnCirclebigroad() //движение по большому кругу
        {
            r = 160;
            x = 170 + (int)Math.Round(r * Math.Cos(counter * 0.1 * speed));
            y = 170 + (int)Math.Round(r * Math.Sin(counter * 0.1 * speed));
            Console.WriteLine("X=" + x + "Y=" + y + "R=" + r);
            /*if (counter == 64)
            {
                great = false;
                counter = 0;
            }*/


        }

        void OnCirclesmallroad() //движение по малому кругу
        {
            r = 120;
            x = 170 + (int)Math.Round(r * Math.Cos(counter * 0.1 * -1 * speed));
            y = 170 + (int)Math.Round(r * Math.Sin(counter * 0.1 * -1 * speed));
            Console.WriteLine("X=" + x + "Y=" + y + "R=" + r);
            /*if (counter == 64)
            {
                great = true;
                counter = 0;
            }*/

        }

        public void Finish()
        {
            life = false;
        }
    }

    class Cars : Form
    {
        public Car[] pCar; // Массив объектов-машин
        public int n; // кол-во машин
 
        public Cars()
        {
            n = 2;
            pCar = new Car[n];
            this.DoubleBuffered = true;
            for (int i = 0; i < n; i++)
            {
                if (i % 2 == 1)
                {
                   
                    pCar[i] = new Car(i, "Машина", 165, 330, true);
                    pCar[i].ev += new delEv(HandlerEv);
                }
                else
                {
                   
                    pCar[i] = new Car(i, "Машина", 312, 96, false);
                    pCar[i].ev += new delEv(HandlerEv);
                }
            }
            Text = "Cars";
            Start();//
        }
        //---------------------------------------------------
        public void Start()          // Стартовать
        {
            for (int i = 0; i < n; i++)
            {
                pCar[i].Start();
            }
        }
        public void Suspend()     // Возобновить
        {
            for (int i = 0; i < n; i++)
                pCar[i].Suspend();
        }
        //---------------
        public void Resume()      // Приостановить
        {
            for (int i = 0; i < n; i++)
                pCar[i].Resume();
        }

        //------------------------------------------------------

        void HandlerEv()
        {
            Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e) //рисование
        {

            e.Graphics.DrawEllipse(new Pen(Color.Black, 40), 20, 20, 320, 320);
            e.Graphics.DrawEllipse(new Pen(Color.Black, 40), 65, 65, 230, 230);
            for (int i = 0; i < n; i++)
            {
                //рисование машины
                e.Graphics.DrawRectangle(new Pen(Color.Red, 4), pCar[i].X, pCar[i].Y, 20, 20);
                //e.Graphics.DrawRectangle(new Pen(Color.Green, 4), pCar[i].X, pCar[i].Y, 20, 20);
                e.Graphics.DrawString(pCar[i].N.ToString(), Font, new SolidBrush(Color.Blue), pCar[i].X + 4, pCar[i].Y + 4);
                //e.Graphics.DrawRectangle(new Pen(Color.Blue, 4), pCar[i].X, pCar[i].Y, 20, 20);
            }
        }
        protected override void OnClosed(EventArgs e) //закрытие
        {
            //car1.Finish();
            //pCar[i].Finish();
            //for (int i = 0; i < cars.n; i++) // Завершить потоки
            //cars.pCar[i].Finish();

        }
    }

    class User : Cars                  // Класс пользователя машин
    {
        private bool run;
        int i;
        Form pChildForm;
        Button pBut,pBut2,pBut3;
        List <int> carslist = new List <int>();
       
        public User()
        {
            run = true;
            //---------------          
            pBut = new Button();
            pBut.Location = new Point(32, 24);
            pBut.Name = "pBut";
            pBut.Size = new System.Drawing.Size(120, 30);
            pBut.Text = "Suspend/Resume";
            pBut.Click += new EventHandler(OnBut);
            //ClientSize = new System.Drawing.Size(200, 150);
            //---------------
            pBut2 = new Button();
            pBut2.Location = new Point(120, 24);
            pBut2.Name = "pBut";
            pBut2.Size = new System.Drawing.Size(120, 30);
            pBut2.Text = "Delete";
            pBut2.Click += new EventHandler(Delete);
            //---------------
            pBut3 = new Button();
            pBut3.Location = new Point(210, 24);
            pBut3.Name = "pBut";
            pBut3.Size = new System.Drawing.Size(120, 30);
            pBut3.Text = "Add a car";
            pBut3.Click += new EventHandler(Add);
            ClientSize = new System.Drawing.Size(200, 150);
            //---------------
            pChildForm = new Form();
            pChildForm.Location = new Point(500, 500);
            pChildForm.Size = new Size(800, 450);
            pChildForm.Text = "User";
            pChildForm.Show();
            pChildForm.Controls.Add(pBut);
            pChildForm.Controls.Add(pBut2);
            pChildForm.Controls.Add(pBut3);
            pChildForm.ClientSize = new System.Drawing.Size(250, 100);
        }
        //---------------
        void OnBut(object obj, EventArgs e) // Обработчик кнопки
        {
            Console.WriteLine("OkMouse");
            if (run)
            {
                run = false;
                Suspend();
            }
            else
                if (!run)
                {
                    run = true;
                    Resume();
                }
        }
        //---------------
        void Delete(object obj, EventArgs e)
        {
            carslist.RemoveRange(0, carslist.Count);
            Update();
            Invalidate();
        }
        //---------------
        void Add(object obj, EventArgs e)
        {
            Cars cars = new Cars();
            pCar[i].ev += new delEv(HandlerEv);
            Start();
            carslist.Add(n+1);
           // break;
           
        }

        static void Main() //самая главная функция
        {
            Cars cars = new Cars();
            Application.Run(new User());
            //Application.Run(cars); // Выполнить приложение
            for (int i = 0; i < cars.n; i++) // Завершить потоки
                cars.pCar[i].Finish();

        }
    }
}
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан список произвольного уровня вложенности,превратить его в список атомов Дрон Lisp 6 19.11.2014 22:38
Нет нужной кнопки Drive Любые вопросы от новичков 4 18.07.2012 07:27
Код для кнопки rinat1980 Visual Basic 1 06.12.2011 11:47
Как в windows phone 7 сделать так, чтобы при нажатии кнопки один style этой кнопки с Жужа Другие мобильные платформы 0 06.03.2011 18:52
программа которая берет список и создает список другой из этого же списка + исходный Ma3day Prolog 5 26.11.2010 15:40
Обработчик для кнопки Eugenio DHTML, JavaScript, VBScript 1 02.09.2009 08:07
Задан список произвольного уровня вложенности, сформировать из него новый список Kolobov_Anton Lisp 3 26.03.2009 22:29
Как построить список из элементов 1го списка входящих во 2ой список Ирина 24 Lisp 3 10.02.2009 10:55
Построить список из элементов 2го списка не входящий в 1ый список Ирина 24 Lisp 4 10.02.2009 10:28
Кнопки! -=Rain=- Visual Basic 3 07.11.2005 21:53
Изменяющиеся кнопки??????? @lexis Visual Basic 1 27.09.2005 15:46
Вид кнопки как задавать Anonymous DHTML, JavaScript, VBScript 18 16.12.2003 01:32



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов