//-------------------------------------------------------------------------
            /// <summary>
            /// 構築
            /// 初期アサインとアサインを別々に設定する版
            /// </summary>
            /// <param name="rule">割り当てルール</param>
            /// <param name="name">アサイン名</param>
            /// <param name="group">グループ名</param>
            /// <param name="default_key">初期アサイン</param>
            /// <param name="key">アサイン</param>
            /// <param name="tag">タグ</param>
            /// <param name="ini_name">設定ファイル書き出し時の名前(英数が望ましい)</param>
            internal Assign(KeyAssignRule rule, string name, string group, Keys default_key, Keys key, object tag, string ini_name)
            {
                if (rule == null)
                {
                    throw new ArgumentNullException("ショートカットに割り当てられるかを決定するためにAssignRuleが必要です。");
                }
                m_assign_rule = rule;

                m_keys         = key;
                m_default_keys = default_key;
                m_name         = name;
                m_group        = group;
                m_tag          = tag;
                m_ini_name     = ini_name;

                // アサイン不可能ならNoneにする
                if (!CanAssignKeys(m_keys))
                {
                    m_keys = Keys.None;
                }
                // 初期値で割り当て不可なら例外を投げる
                if ((m_default_keys != Keys.None) &&
                    (!CanAssignKeys(m_default_keys)))
                {
                    throw new Exception("割り当てできないキーの組み合わせが初期値に指定されました。");
//					m_default_keys	= Keys.None;
                }
            }
 //-------------------------------------------------------------------------
 /// <summary>
 /// 構築、
 /// コピーコンストラクタ
 /// </summary>
 /// <param name="from"></param>
 public KeyAssignList(KeyAssignList from)
 {
     m_list        = new List <Assign>();
     m_assign_rule = from.m_assign_rule;                 // ルールは参照をコピー
     foreach (Assign i in from.m_list)
     {
         m_list.Add(new Assign(i));
     }
 }
        //-------------------------------------------------------------------------
        /// <summary>
        /// 構築、
        /// KeyAssignRuleを指定する
        /// </summary>
        /// <param name="rule"></param>
        public KeyAssignList(KeyAssignRule rule)
        {
            m_list        = new List <Assign>();
            m_assign_rule = rule;

            if (m_assign_rule == null)
            {
                throw new ArgumentNullException("AssignRuleの指定がnullです。");
            }
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// System.Windows.Forms.Shortcutの場合のみtrueを返す
        /// </summary>
        /// <param name="key">Keys</param>
        /// <returns>アサイン可能ならtrue</returns>
        public override bool CanAssignKeys(Keys key)
        {
            // System.Windows.Forms.Shortcutかどうかチェック
            if (!KeyAssignRule.IsShortcut(key))
            {
                return(false);
            }

            // base
            return(base.CanAssignKeys(key));
        }
 //-------------------------------------------------------------------------
 /// <summary>
 /// 構築、割り当てルール指定版
 /// </summary>
 /// <param name="rule"></param>
 public KeyAssignManager(KeyAssignRule rule)
 {
     m_list = new KeyAssignList(rule);
 }
 //-------------------------------------------------------------------------
 /// <summary>
 /// 構築
 /// 初期アサインを最初のアサインとする
 /// </summary>
 /// <param name="rule">割り当てルール</param>
 /// <param name="name">アサイン名</param>
 /// <param name="group">グループ名</param>
 /// <param name="default_key">初期アサイン</param>
 /// <param name="tag">タグ</param>
 /// <param name="ini_name">設定ファイル書き出し時の名前(英数が望ましい)</param>
 internal Assign(KeyAssignRule rule, string name, string group, Keys default_key, object tag, string ini_name)
     : this(rule, name, group, default_key, default_key, tag, ini_name)
 {
 }