第28回 再生フォルダを変更可能にする

だいぶ前「第23回 再生条件設定画面を作る」で再生フォルダの選択/設定部分は作りました。
しかしフォルダを変更してもプログラムを再起動しないと変更が適用されていませんでした。
今回は再生フォルダの変更適用処理を追加します。
データベース関連の適用処理については次回以降へ持ち越しです。

EventHandlerを使いたい気分になってきたので、今回はそれを利用した実装にします。
Option.strFolderが変更されたらFolderChangedイベントが発生するようにしました。

■Option.cs
	[Serializable]
	public class Option
	{
		void AfterLoaded()
		{
			//デフォルトでカラオケ曲などをNG指定
			AddNGWord("カラオケ");
			AddNGWord("karaoke");
			AddNGWord("inst.");
			AddNGWord("instrum");
			AddNGWord("トイレの神様");
		}

		public int nVolume
		{
			get { return _nVolume; }
			set { _nVolume = value; }
		}
		int _nVolume = 20;

		//以下を変更
		public string strFolder
		{
			get { return _strFolder; }
			set
			{
				if (value != _strFolder)
				{
					_strFolder = value;

					if (FolderChanged != null)
						FolderChanged(this, null);
				}
			}
		}
		string _strFolder = @"G:\Desktop\mp3\";

		[XmlIgnore]
		public EventHandler<EventArgs> FolderChanged = null;		//追加
■Form1.cs
		public Form1()
		{
			InitializeComponent();

			//設定の読み込み
			Option.Load(out _option, Utility.GetExeFolder() + "option.txt");

			Utility.CreateTmpFolder();			//tmpフォルダの作成


			//DBに情報がなければ再構築する=>時間が非常にかかる!
			if (MP3Info.GetCount() == 0)
			{
				MP3Info.RefreshAllInfo(true);
			}

			//削除
			////mp3フォルダからの音楽ファイルリスト読み込み
			//_listFiles = EnumFiles(_option.strFolder);


			//フォームが表示されたときの処理
			Shown += delegate
			{
				//シークバーにフォーカスがあると、再生位置が表示されないのでここで再生ボタンにフォーカスを与える
				buttonPlay.Focus();
			};


		.
		.
		.

			_mediaPlayer.PlayStateChange += delegate(int nNewState)
			{
				WMPPlayState state = (WMPPlayState)nNewState;

				switch (state)
				{
					case WMPPlayState.wmppsStopped:
						buttonPlay.Text = ">";
						trackBarSeek.Value = 0;
						break;

					case WMPPlayState.wmppsPaused:
						_timer.Stop();
						buttonPlay.Text = ">";
						break;

					case WMPPlayState.wmppsPlaying:
						_bStopButtonPushed = false;
						buttonPlay.Text = "||";
						_timer.Start();
						break;

					case WMPPlayState.wmppsTransitioning:
						break;
				}
			};

			//以下を追加
			_option.FolderChanged += delegate
			{
				CreateFileListAndPlay(true);		//フォルダを読み込み、再生開始
			};
			_option.FolderChanged(null, null);		//フォルダを読み込み、再生開始

			//Play();		//削除
		}


		//以下を追加
		/// <summary>
		/// 設定フォルダから音楽ファイルリストを読み込む
		/// </summary>
		void CreateFileListAndPlay(bool bPlay)
		{
			buttonStop_Click(null, null);		//再生停止

			//再生リストのクリア
			_listPlayHistory.Clear();
			_listPlayNext.Clear();
			_nCurrentIndex = -1;

			//mp3フォルダからの音楽ファイルリスト読み込み
			_listFiles = EnumFiles(_option.strFolder);

			if (bPlay)
				Play();		//再生開始
		}

プロジェクトファイルをダウンロード


カテゴリー「MP3プレーヤーを作る(C#)」 のエントリー