//--------------------------------------------------------------
//	複数のコントロールに対して共通の処理を行なう static クラス
//
//		作成者：三上直樹，2022/11/27 作成，©三上直樹 2022
//--------------------------------------------------------------

using System;
using System.Linq;
using System.Windows.Forms;

namespace Mikami.WindowsApplication
{
	public static class CommonProc
	{
		// 引数で指定された複数の ｢コントロール｣ を ｢有効｣ の状態に設定する
		public static void Enable(params Control[] c)
		{
			Do(x => x.Enabled = true, c);
		}

		// 引数で指定された複数の ｢コントロール｣ を ｢無効｣ の状態に設定する
		public static void Disable(params Control[] c)
		{
			Do(x => x.Enabled = false, c);
		}

		// ｢Enabled｣ が ｢true｣ の複数の ｢コントロール｣ に対して共通の処理を適用する
		public static void DoEnabled(Action<Control> myAction,
									 params Control[] c)
		{
			foreach(var x in c.Where(e => e.Enabled)) Do(myAction, x);
		}

		// 引数で指定された複数の ｢コントロール｣ に対して共通の処理を適用する
		public static void Do(Action<Control> myAction, params Control[] c)
		{
			try
			{
				foreach(var x in c) myAction(x);
			}
			catch (InvalidCastException obj)
			{
				DialogResult result =
					MessageBox.Show(obj.Message + "\n\n強制終了しますか？",
									"Do メソッドでエラーが発生。",
									MessageBoxButtons.YesNo,
									MessageBoxIcon.Warning);
				if (result == DialogResult.Yes) Environment.Exit(1);
			}
		}
	}
}
