Экскурсия по Мадагаскару продолжается. Здесь находится склад, где хранятся все вещи, забытые туристами.
На каждой полке расположены наборы разных предметов. Но часть вещей так и не разложили по полкам. Дополни каждый набор недостающими предметами.
Теоретические сведения
Во время создания программы изучаются следующие темы:
- компоненты 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. Добавьте в программу возможность игры на время.