VC#2010. Склад забытых вещей

Nata
0

Экскурсия по Мадагаскару продолжается. Здесь находится склад, где хранятся все вещи, забытые туристами.

На каждой полке расположены наборы разных предметов. Но часть вещей так и не разложили по полкам. Дополни каждый набор недостающими предметами.



Теоретические сведения

Во время создания программы изучаются следующие темы:

- компоненты Form, PictureBox;

- свойства для определения границы  компонента;

- событие OnClick компонента;

- использование глобальных переменных, оператор switch;

- объект sender.


Практикум

 

Задание 1. Подготовка изображений

1. Выберите тему.

2. Подберите фоновое изображение (размер 720х480 пикс.).

3. Подберите изображения предметов.

 

Задание 2. Разработка программы

Создание интерфейса программы

4. Создайте новый проект, сохраните его.

5. Добавьте фоновое изображение, задайте для него свойства:

  SizeMode = AutoSize

  Name = pictureBox_bkgr

6. Задайте свойства формы:

  AutoSize = True

FormBorderStyle = FixedSingle

MaximizeBox = False

  Caption = Склад

Name = FormSklad

7. Внизу формы добавьте изображения предметов, задайте для них свойства:

SizeMode = CenterImage

BackColor = Linen

Имена компонентов должны быть pictureBox1…pictureBox6, имена ресурсов: pic1…pic6.

 

Программирование функций интерфейса

8. Напишите обработчик события OnClick для компонента pictureBox1:

    private void pictureBox1_Click(object sender, EventArgs e)

    {

      if (this.pictureBox1.BorderStyle == BorderStyle.None)

        this.pictureBox1.BorderStyle = BorderStyle.FixedSingle;

      else

        this.pictureBox1.BorderStyle = BorderStyle.None;

    }

9. Добавьте обработчик события OnLoad формы:

    private void Form1_Load(object sender, EventArgs e)

    {

      this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);

    }

Запустите программу и убедитесь, что работает код для первого предмета.

10. Измените код процедуры Form1_Load таким образом, чтобы при нажатии на остальных изображениях предметов выполнялась процедура pictureBox1_Click

    private void Form1_Load(object sender, EventArgs e)

    {

      this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);

      this.pictureBox2.Click += new System.EventHandler(this.pictureBox1_Click);

      this.pictureBox3.Click += new System.EventHandler(this.pictureBox1_Click);

      this.pictureBox4.Click += new System.EventHandler(this.pictureBox1_Click);

      this.pictureBox5.Click += new System.EventHandler(this.pictureBox1_Click);

      this.pictureBox6.Click += new System.EventHandler(this.pictureBox1_Click);

    }

11. Измените код процедуры pictureBox1_Click:

    private void pictureBox1_Click(object sender, EventArgs e)

    {

      if (((PictureBox)sender).BorderStyle == BorderStyle.None)

        ((PictureBox)sender).BorderStyle = BorderStyle.FixedSingle;

      else

        ((PictureBox)sender).BorderStyle == BorderStyle.None;

    }

Запустите программу и убедитесь, что теперь работает код для всех предметов.

 

Добавление возможности выбрать только один предмет

12. Объявите глобальную переменную iPicSelected

  public partial class FormSklad : Form

  {

    int iPicSelected = 0;

    public FormSklad()

    {

      InitializeComponent();

    }

13. Измените код процедуры pictureBox1_Click

    private void pictureBox1_Click(object sender, EventArgs e)

    {

      int iPicClicked = Convert.ToInt32(((PictureBox)sender).Tag);

      if (iPicSelected == 0)

      {

        ((PictureBox)sender).BorderStyle = BorderStyle.FixedSingle;

        iPicSelected = iPicClicked;

      }

      else

      {

        if (iPicSelected == iPicClicked)

        {

          ((PictureBox)sender).BorderStyle == BorderStyle.None;

          iPicSelected = 0;

        }

      }

    }

14. Для предметов, расположенных внизу формы, задайте значения Tag. Это можно сделать в панели свойств или дописать следующий код в процедуру Form1_Load:

      this.pictureBox1.Tag = 1;

      this.pictureBox2.Tag = 2;

      this.pictureBox3.Tag = 3;

      this.pictureBox4.Tag = 4;

      this.pictureBox5.Tag = 5;

      this.pictureBox6.Tag = 6;

 

Расположение предмета на полке

15. Добавьте в проект файлы DrawingArea.cs, DrawingPicture.cs, ресурс empty. В файле DrawingPicture.cs измените код процедуры OnDraw

  protected override void OnDraw()

  {

    if (nameResource != "")

    {

      // Gets the image from the global resources

      Image newImage = global::Sklad.Properties.Resources.empty;

      if (nameResource == "pic1")

        newImage = global::Sklad.Properties.Resources.pic1;

      if (nameResource == "pic2")

        newImage = global::Sklad.Properties.Resources.pic2;

      if (nameResource == "pic3")

        newImage = global::Sklad.Properties.Resources.pic3;

      if (nameResource == "pic4")

        newImage = global::Sklad.Properties.Resources.pic4;

      if (nameResource == "pic5")

        newImage = global::Sklad.Properties.Resources.pic5;

      if (nameResource == "pic6")

        newImage = global::Sklad.Properties.Resources.pic6;

 

      // Sets the image size and position

      int width = newImage.Size.Width;

      int height = newImage.Size.Height;

      Rectangle big = new Rectangle(0, 0, width, height);

 

      // Draws the image

      this.graphics.DrawImage(newImage, big);

    }

  }

16. Запустите программу, после этого в панели Toolbox появится новый компонент DrawingEmptyArea. Расположите на форме 4 таких элемента, назовите их picAnswer1, picAnswer2, picAnswer3, picAnswer4.

17. В процедуру Form1_Load допишите код:

      this.picAnswer1.Click += new System.EventHandler(this.picAnswer1_Click);

      this.picAnswer2.Click += new System.EventHandler(this.picAnswer1_Click);

      this.picAnswer3.Click += new System.EventHandler(this.picAnswer1_Click);

      this.picAnswer4.Click += new System.EventHandler(this.picAnswer1_Click);

    }

18. Измените код процедуры picAnswer1_Click

    private void picAnswer1_Click(object sender, EventArgs e)

    {

      ((DrawingEmptyArea)sender).Hide();

      switch(iPicSelected)

      {

        case 1:

          ((DrawingEmptyArea)sender).nameResource = "pic1";

          this.pictureBox1.BorderStyle = BorderStyle.None;

          break;

        case 2:

          ((DrawingEmptyArea)sender).nameResource = "pic2";

          this.pictureBox2.BorderStyle = BorderStyle.None;

          break;

        case 3:

          ((DrawingEmptyArea)sender).nameResource = "pic3";

          this.pictureBox3.BorderStyle = BorderStyle.None;

          break;

        case 4:

          ((DrawingEmptyArea)sender).nameResource = "pic4";

          this.pictureBox4.BorderStyle = BorderStyle.None;

          break;

        case 5:

          ((DrawingEmptyArea)sender).nameResource = "pic5";

          this.pictureBox5.BorderStyle = BorderStyle.None;

          break;

        case 6:

          ((DrawingEmptyArea)sender).nameResource = "pic6";

          this.pictureBox6.BorderStyle = BorderStyle.None;

          break;

      }

      ((DrawingEmptyArea)sender).Show();

      iPicSelected = 0;

    }

 

Упражнения

1. Добавьте в программу проверку, чтобы в случае, когда головоломка будет решена, на экране появлялась кнопка «Выход», которая будет закрывать окно.

2. Добавьте в программу окно с описанием задания головоломки.

3. Добавьте в программу возможность игры на время.




Tags

Дописати коментар

0Коментарі
* Please Don't Spam Here. All the Comments are Reviewed by Admin.
Дописати коментар (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Accept !