Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 17:

Пользовательские элементы управления

Настройка части свойств объектов музыкальных кнопок в конструкторе класса SoundButtonBox
  • Добавьте в конец конструктора класса SoundButtonBox одноименного файла C# код, чтобы класс стал таким
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
    
namespace MyCompany.UserControls
{
    public partial class SoundButtonBox : UserControl
    {
    public SoundButtonBox()
    {
    InitializeComponent();
    
    // Подключить первую кнопку к звуковому файлу
    soundButton1.WaveFile = System.IO.Path.Combine(     // Склеить два пути
    Environment.GetEnvironmentVariable("windir"),   // Каталог системы
      @"Media\tada.wav");
    
    // Подключить вторую кнопку к звуковому файлу
    soundButton2.WaveFile = "SOUND827.WAV";
    
    // Подключить третью кнопку к звуковому файлу из файла ресурсов сборки
    Stream.WaveStream = this.GetType().Assembly.GetManifestResourceStream(
      "MyCompany.UserControls.Trumpet1.wav");
    }
    }
}
Листинг 17.8 . Класс SoundButtonBox в файле SoundButtonBox.cs

Ниже приведен код, формируемый оболочкой при настройке компонента SoundButtonBox в визуальном режиме

namespace MyCompany.UserControls
{
partial class SoundButtonBox
  {
  /// <summary> 
  /// Required designer variable.
  /// </summary>
  private System.ComponentModel.IContainer components = null;
    
  /// <summary> 
  /// Clean up any resources being used.
  /// </summary>
  /// <param name="disposing">true 
    if managed resources should be disposed; 
    otherwise, false.</param>
  protected override void Dispose(bool disposing)
  {
  if (disposing && (components != null))
    {
    components.Dispose();
    }
  base.Dispose(disposing);
  }
    
  #region Component Designer generated code
    
  /// <summary> 
  /// Required method for Designer support - do not modify 
  /// the contents of this method with the code editor.
  /// </summary>
  private void InitializeComponent()
    {
    this.components = new System.ComponentModel.Container();
    this.flow = new System.Windows.Forms.FlowLayoutPanel();
    this.soundButton1 = new MyCompany.UserControls.SoundButton
    (this.components);
    this.soundButton2 = new MyCompany.UserControls.SoundButton
    (this.components);
    this.Stream = new MyCompany.UserControls.SoundButton
    (this.components);
    this.Web = new MyCompany.UserControls.SoundButton
    (this.components);
    this.flow.SuspendLayout();
    this.SuspendLayout();
    // 
    // flow
    // 
    this.flow.AutoSize = true;
    this.flow.Controls.Add(this.soundButton1);
    this.flow.Controls.Add(this.soundButton2);
    this.flow.Controls.Add(this.Stream);
    this.flow.Controls.Add(this.Web);
    this.flow.Dock = System.Windows.Forms.DockStyle.Fill;
    this.flow.FlowDirection = 
    System.Windows.Forms.FlowDirection.TopDown;
    this.flow.Location = new System.Drawing.Point(0, 0);
    this.flow.Name = "flow";
    this.flow.Size = new System.Drawing.Size(440, 172);
    this.flow.TabIndex = 0;
    this.flow.WrapContents = false;
    // 
    // soundButton1
    // 
    this.soundButton1.Anchor = System.Windows.Forms.AnchorStyles.None;
    this.soundButton1.AutoSize = true;
    this.soundButton1.Location = new System.Drawing.Point(88, 8);
    this.soundButton1.Margin = new System.Windows.Forms.Padding(8);
    this.soundButton1.Name = "soundButton1";
    this.soundButton1.Size = new System.Drawing.Size(264, 27);
    this.soundButton1.TabIndex = 0;
    this.soundButton1.Text = "Файл tada.wav в системном каталоге";
    this.soundButton1.UseVisualStyleBackColor = true;
    this.soundButton1.WaveFile = "";
    this.soundButton1.WaveStream = null;
    // 
    // soundButton2
    // 
    this.soundButton2.Anchor = System.Windows.Forms.AnchorStyles.None;
    this.soundButton2.AutoSize = true;
    this.soundButton2.Location = new System.Drawing.Point(28, 51);
    this.soundButton2.Margin = new System.Windows.Forms.Padding(8);
    this.soundButton2.Name = "soundButton2";
    this.soundButton2.Size = new System.Drawing.Size(384, 27);
    this.soundButton2.TabIndex = 1;
    this.soundButton2.Text = "Файл SOUND827.WAV 
    в каталоге исполняемой сборки";
    this.soundButton2.UseVisualStyleBackColor = true;
    this.soundButton2.WaveStream = null;
    // 
    // Stream
    // 
    this.Stream.Anchor = System.Windows.Forms.AnchorStyles.None;
    this.Stream.AutoSize = true;
    this.Stream.Location = new System.Drawing.Point(41, 94);
    this.Stream.Margin = new System.Windows.Forms.Padding(8);
    this.Stream.Name = "Stream";
    this.Stream.Size = new System.Drawing.Size(358, 27);
    this.Stream.TabIndex = 2;
    this.Stream.Text = "Файл Trumpet1.wav 
    в ресурсе исполняемой сборки";
    this.Stream.UseVisualStyleBackColor = true;
    this.Stream.WaveFile = "";
    this.Stream.WaveStream = null;
    // 
    // Web
    // 
    this.Web.Anchor = System.Windows.Forms.AnchorStyles.None;
    this.Web.AutoSize = true;
    this.Web.Location = new System.Drawing.Point(8, 137);
    this.Web.Margin = new System.Windows.Forms.Padding(8);
    this.Web.Name = "Web";
    this.Web.Size = new System.Drawing.Size(424, 27);
    this.Web.TabIndex = 3;
    this.Web.Text = "Файл azlinsnd.wav, 
    загружаемый из Web по URL (отключено)";
    this.Web.UseVisualStyleBackColor = true;
    this.Web.WaveFile = 
  "http://www.oaklandzoo.org/atoz/azlinsnd.wav";
    this.Web.WaveStream = null;
    // 
    // SoundButtonBox
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.AutoSize = true;
    this.AutoSizeMode = 
    System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    this.Controls.Add(this.flow);
    this.Name = "SoundButtonBox";
    this.Size = new System.Drawing.Size(440, 172);
    this.flow.ResumeLayout(false);
    this.flow.PerformLayout();
    this.ResumeLayout(false);
    this.PerformLayout();
    
    }
    
    #endregion
    
    private System.Windows.Forms.FlowLayoutPanel flow;
    private SoundButton soundButton1;
    private SoundButton soundButton2;
    private SoundButton Stream;
    private SoundButton Web;
    }
}
Листинг 17.9 . Код файла SoundButtonBox.Designer.cs
Подготовка файлов звука к проигрыванию компонентом SoundButtonBox

Присоединим адресуемые звуки к проекту нашей библиотеки компонентов UserControls.

Первый звук: Первый звук tada.wav хранится в системном каталоге Windows и путь к нему мы формируем с использованием библиотечного класса Environment.

Второй звук: Второй звук SOUND827.WAV (или любой другой) код компонента ищет в каталоге размещения самой сборки. Для того, чтобы он там оказался, выполните следующее:

  • В панели Solution Explorer выделите узел проекта UserControls и командой оболочки Project/Add Existing Item загрузите нужный файл в каталог проекта. Файл будет скопирован в каталог размещения проекта (звук SOUND827.WAV находится в прилагаемом к данной работе каталоге Source )

Выполненным действием мы скопировали файл звука пока-что в каталог размещения проекта. А он должен находиться в каталоге размещения самой сборки кода компонента. Нам нужно настроить оболочку для работы с этим файлом так, чтобы при компиляции кода компонента она автоматически копировала звук в каталог размещения сборки самого компонента.

  • В панели Solution Explorer вызовите контекстное меню для скопированного файла звука SOUND827.WAV и выполнить команду Properties. Установите опцию Copy to Output Directory в значение Copy if newer (копировать при обновлении файла звука) или Copy always (копировать всегда). Теперь оболочка сама при компиляции проекта разместит файл в одном со сборкой компонента каталоге

Третий звук: Свойство WaveStream используется для проигрывания звука, присоединенного к исполняемому файлу как внедренный ресурс. Файл Trumpet1.wav внедряемого как ресурс звука нужно добавить к проекту, а затем настроить его свойства так, чтобы компилятор поместил его в сборку компонента.

  • В панели Solution Explorer выделите узел проекта UserControls и командой Add/Add Existing Item контекстного меню загрузите файл Trumpet1.wav в каталог проекта из прилагаемого к работе каталога Source
  • Через команду Properties контекстного меню, вызванного в панели Solution Explorer для файла Trumpet1.wav, установите в таблице свойств Properties поле Build Action в значение Embedded Resource (назначить внедренным ресурсом)

Теперь звук Trumpet1.wav на этапе компиляции будет внедрен в исполнимую сборку и готовое приложение может далее выполняться отдельно от первоисточника звука. Так удобно поступать с файлами небольших размеров. Для загрузки звука из ресурса нужно указывать полный путь к ресурсу, включая пространство имен проекта.

Четвертый звук: Специальных подготовительных действий не требует, поскольку извлекается из библиотеки .NET Framework.

  • Откомпилируйте проект с компонентами, выполнив команду Rebuild контекстного меню узла UserControls в панели Solution Explorer
  • Запустите проводник Windows Explorer и убедитесь, что размер сборки UserControls существенно увеличился за счет внедренного звука Trumpet1.wav.
Тестирование компонента SoundButtonBox
  • Добавьте к решению командой File/Add/New Project новый проект типа оконного приложения ( Windows Application ) с именем SoundButtonsTest и назначьте его стартовым командой Project/Set as StartUp Project меню оболочки (или аналогичной командой контекстного меню)
  • Поместите на форму из панели Toolbox экземпляр компонента SoundButtonBox и выровняйте его по размеру формы
  • Подключите динамики, запустите приложение и испытайте его работу

Отметьте, что разные исполнимые сборки используют одну и ту же библиотеку компонентов UserControls.dll при условии, что эта библиотека находится в том же каталоге, что и исполнимая сборка. При добавлении к нашему решению MySolution, содержащему проект библиотеки компонентов UserControls, нового проекта SoundButtonsTest исполнимого приложения оболочка автоматически копирует эту библиотеку в каталог, где будет находиться исполнимая сборка. При любом изменении библиотеки компонентов при ее компиляции оболочка обновляет файл библиотеки во всех каталогах, где находятся файлы исполнимых сборок.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?