До колко разбираме програмирате, които използваме всеки ден като Facebook, google, YouTube, bgmaps и тн.? Във всички тези програми има неща, които се случват сякаш автоматично. Например още щом започнем да пишем име на наш приятел във Facebook и ни излиза списък с предложения, кого търсим. Или когато свърши една песен в YouTube, автоматично започва следваща. В този урок ще видим, че всъщност зад всички тези неща стои програмен код и ще се научим как да пишем такъв код в C#.

Events example - FB

Цел на урока: Да използваме основни събития в наша програма. Да описваме понятието събитийно програмиране и неговите характеристики.

Увод: Visual C# е език за събитийно програмиране, което означава, че всеки код, който пишем съответства на дадено събитие. (натискане с мишката, двукратно натискане с мишката, преминаване през контролата с мишката и други) От това следват 2 основни неща:

1) кодът се изпълнява само при настъпване на даденото събитие

2) може да имаме различен код за различни събития: например при еднократно натискане с мишката да се случват операции 1, а при двукратно натискане с мишката да се случват операции 2.

Нов материал:

1. Събитие – информира програмата, когато нещо важно се случи.

Например: потребителя натисне някой бутон и програмата трябва да реагира; започваме да пишем текст за търсене в google и автоматично ни се довършва думата; потребител преминава с мишката над някоя картинка и програмата трябва да реагира;

2. Характеристики на събитийно пограмиране

а) програмата е в изчакващо състояние и настъпването на определени събития определя кога и коя част от кода ще се изпълни

б) събитията може да настъпват паралелно – докато се изпълнява едно събитие, да настъпи друго

3. Видове събития

– натискане с мишката: Click

– двойно натискане с мишката: DoubleClick

– натискане на клавиш от клавиатурата: KeyDown

– зареждане на формата – настъпва, когато стартираме програма: Form_Load

Примерна задача: Да се напише програма, която при натискане на етикет един път изписва в текстово поле “Clicked once” при натискане на етикет два пъти – изписва в текстовото поле “Clicked twice”.

Events menu screenshot

private void label1_Click(object sender, EventArgs e)
{
  label1.Text = "Clicked once";
}

private void label1_DoubleClick(object sender, EventArgs e)
{
  label1.Text = "Clicked twice";
}

 

Примерна задача 2: Да се напише програма, която позволява да управляваме картинка (герой) наляво и надясно със стрелките на клавиатурата. И да може да изстрелва друга картинка (стрели).
events-keydown

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
  if (e.KeyCode == Keys.Left)
  {
    pictureBox1.Left = pictureBox1.Left - 10;
  }
  if (e.KeyCode == Keys.Right)
  {
     pictureBox1.Left = pictureBox1.Left + 10;
  }
  if (e.KeyCode == Keys.Space)
  {
    pictureBox2.Top = pictureBox1.Top;
    pictureBox2.Left = pictureBox1.Left;
    timer1.Enabled = true;
  }
}

Задача за домашно:

  1. Да се напише програма, която позволява да управляваме картинка (кошница) като я мърдаме в 4-те посоки с клавиши по избор.

б) Срещу картинката да лети друга картинка (сандвич) чрез таймер и като падне сандвича в кошницата да трупаме точка.

Задачи за самостоятелна работа:

  1. Да се направи програма, която в етикет (label) показва кой клавиш сме натиснали.
  2. Да се направи игра в която управляваме космически кораб наляво и надясно. Срещу нас идват вражески кораби, които трябва да унищожаваме с лазер.

Код за да може вражеските кораби да се показват на случайно произволно място:

Random rnd = new Random();

int position = rnd.Next(1, 300);
pictureBox1.Left = position;