|
Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Класс Control и стандартные элементы управления (обзор)
Графическое окно PictureBox
Этот элемент служит для отображения растров или метафайлов. Изображение задается свойством Image. Свойство SizeMode задает режим отображения с помощью перечисления System.Windows.Forms.PictureBoxSizeMode, которое имеет следующие значения
- AutoSize - графическое окно подстраивается под размер изображения
- CenterImage - изображение размещается по центру графического окна
- Normal - изображение размещается в левом верхнем углу графического окна
- StretchImage - изображение масштабируется под размер графического окна
- Zoom - изображение масштабируется внутри графического окна без искажений
Вот пример, для выполнения которого нужно разместить рисунки (прилагаются в каталоге Pictures ) в одной папке с исполнимым файлом.
using System;
using System.Drawing;
using System.Windows.Forms;
class MyClass : Form
{
PictureBox pictureBox;
string[] photo = {
"Photo.bmp",
"Photo.jpg",
"Photo.png"
};
public MyClass()
{
// Загрузили иконку
this.Icon = new Icon("1.ICO");
// Текст заголовка окна
this.Text = "Испытание элемента PictureBox";
// Подписались на события формы
this.Click += FormClick;
this.Paint += BeginPaint;
pictureBox = new PictureBox();// Создали элемент
pictureBox.Parent = this;// Назначили родителя
// Распахнули на всю форму
pictureBox.Dock = DockStyle.Fill;
// Масштабировать без искажений
pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
// Чтобы не заслонял текстовое сообщение на форме
pictureBox.Visible = false;
// Подписываем на щелчки элемента тот же обработчик
pictureBox.Click += FormClick;
}
void BeginPaint(object sender, PaintEventArgs e)
{
// Создаем и настраиваем точку привязки текстового блока
StringFormat strfrm = new StringFormat();
strfrm.Alignment = StringAlignment.Center;// Центр по горизонтали
strfrm.LineAlignment = StringAlignment.Center;// Центр по вертикали
// Создаем временный объект для доступа к контексту устройства
Graphics gr = Graphics.FromHwnd(this.Handle);
gr.DrawString("Щелкайте на форме", // Текст сообщения
new Font("Arial", 14, FontStyle.Bold), // Шрифт сообщения
new SolidBrush(Color.Red), // Цвет шрифта
this.ClientSize.Width / 2, // Центр клиентской области по горизонтали
this.ClientSize.Height / 2, // Центр клиентской области по вертикали
strfrm); // Передаем точку привязки текстового блока
gr.Dispose();// Освободили контекст устройства
}
int count = 0;// Счетчик
bool clickFlag = false; // Устанавливается при первом щелчке
void FormClick(object sender, EventArgs e)
{
if (!clickFlag)
{
pictureBox.Visible = true;
this.Paint -= BeginPaint;// Разрегистрируем обработчик
clickFlag = true;
}
//pictureBox.Image = Image.FromFile(photo[count++]);
pictureBox.Load(photo[count++]);
count = count < photo.Length ? count : 0;// Однострочное условие
}
}
Листинг
13.11.
Метод Load() принимает URL или имя файла. Метод LoadAsync() выполняет загрузку в фоновом режиме, создавая дополнительный поток, и информирует о завершении событием LoadCompleted, например,
pictureBox.LoadAsync(@"http://localhost/print.jpg");
Если изображение загружается долго, то можно задать дежурную картинку в свойстве InitialImage, а также картинку в свойстве ErrorImage, выводимую в случае ошибки загрузки. Событие LoadProgressChanged в своем аргументе типа ProgressChangedEventArgs передает информацию о загрузке изображения в процентах. Эту информацию можно использовать в обработчике для отображения с помощью индикатора выполнения ProgressBar, например,
void pictureBox_LoadProgressChanged(object sender,
ProgressChangedEventArgs e)
{ progressBar.Value = e.ProgressPercentage;}Индикатор хода процесса ProgressBar
Основные свойства ProgressBar - это целочисленные Minimum, Maximum, Value. Индикатор процесса напрямую связан со свойством Value, значение которого можно увеличивать несколькими способами:
- Напрямую , например, Value++
- Методом PerformStep(), увеличивающим при каждом вызове на шаг, заданный в свойстве Step
- Методом Increment(int value), увеличивающим на величину целочисленного аргумента
Приведем пример, в котором движком процесса является таймер. Код является несколько избыточным, чтобы продемонстрировать побольше из бесконечного числа особенностей объектно-ориентированного программирования.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
class MyClass : Form
{
ProgressBar progressBar = new ProgressBar();
Timer timer;
const int INTERVAL_TIME = 1000; // Миллисекунды
public MyClass()
{
// Настройка формы
this.Icon = new Icon("1.ICO");
this.Text = "Испытание элемента ProgressBar ";
// Настройка индикатора
progressBar.Parent = this;
progressBar.Width = this.ClientSize.Width;
int y = (this.ClientSize.Height - progressBar.Height) / 2;
progressBar.Location = new Point(0, y);
progressBar.Minimum = 0;
progressBar.Maximum = 20;
progressBar.Step = 1;
progressBar.Style = ProgressBarStyle.Continuous;
// Настройка кнопки
Button btn = new Button();
btn.Parent = this;
btn.Text = "Start/Stop";
btn.AutoSize = true;
btn.Font = new Font("Arial", 12, FontStyle.Italic);
int x = (this.ClientSize.Width - btn.Width) / 2;
y = this.ClientSize.Height - btn.Height - 20;
btn.Location = new Point(x, y);
btn.Click += new EventHandler(btn_Click);
// Настройка таймера
timer = new Timer();
timer.Interval = INTERVAL_TIME;
timer.Tick += new EventHandler(timer_Tick);
}
// Обработчик кнопки управления таймером
bool startTimerFlag = false;
void btn_Click(object sender, EventArgs e)
{
if (!startTimerFlag)
timer.Start();
else
timer.Stop();
startTimerFlag = !startTimerFlag;
}
// Обработчик тиков таймера
void timer_Tick(object sender, EventArgs e)
{
if (progressBar.Value < progressBar.Maximum)
{
progressBar.PerformStep();
}
else
{
timer.Stop();
}
}
// Деструктор, доступ не управляется
~MyClass()
{
if (startTimerFlag)
timer.Stop();
}
}
}
Листинг
13.12.