Прошел курс. Получил код 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.