// <summary>ソースコード：ＨＹＭＣＯセル型モデルプロパティ詳細設定画面クラス</summary>
// <author>CommonMP</author>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using CommonMP.HYSSOP.CoreImpl.HSTools;
using CommonMP.HYSSOP.CoreImpl.HSData;
using CommonMP.HYSSOP.OptionImpl.HSViewer.DotNetViewer;
using CommonMP.HYMCO.Interface;
using CommonMP.HYMCO.Interface.Viewer;
using CommonMP.HYMCO.Interface.Data;
using CommonMP.HYMCO.CoreImpl.Data;
using CommonMP.HYMCO.CoreImpl.Data.StructInfo;

namespace CommonMP.HYMCO.CoreOptions.McViewer.DotNetViewer
{
    /// <summary>
    /// <para>class outline:</para>
    /// <para>セル型モデルプロパティ詳細設定画面</para>
    /// </summary>
    /// <remarks>
    /// <para>history:</para>
    /// <para>[CommonMP][ver 1.0.0][2009/09/03][新規作成]</para>
    /// </remarks>
    public partial class McDotNetModelCellPropertyDetailForm : McDotNetModelCellPropertyDetailBaseForm, McModelCellPropertyDetailFormIF
    {
        /// <summary>
        /// <para>method outline:</para>
        /// <para>デフォルトコンストラクタ</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>McDotNetModelCellPropertyDetailForm csModelCellPropertyDetailForm = new McDotNetModelCellPropertyDetailForm();</para>
        /// </example>
        /// <param name="">無し</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        public McDotNetModelCellPropertyDetailForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>プロパティ編集</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>EditParameter( );</para>
        /// </example>
        /// <param name="">無し</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        public void EditParameter()
        {
            McModelPropertyInfo csModelPrptyInf = null;
            McInitialInfo csModelInitInf = null;

            if (m_csPropertyInfo != null)
            {// 登録プロパティ情報がある場合
                HySString csKey = new HySString();
                HySString csPropertyName = new HySString();
                McDefine.ValKind lObjKind = new McDefine.ValKind();
                long lPropertyTypeNum = 0;
                int lPropertyTypeCnt = 0;
                bool bVal = new bool();
                long lVal = new long();
                double dVal = new double();
                string sVal = "";

                ModelPropertyDataGridView.Rows.Clear();

                csModelPrptyInf = m_csPropertyInfo as McModelPropertyInfo;

                if (csModelPrptyInf != null)
                {// 登録プロパティ情報がある場合
                    // プロパティ情報取得
                    lPropertyTypeNum = csModelPrptyInf.GetInfoTypeNum();    // 登録プロパティ情報数取得
                    for (long lP = 1; lP <= lPropertyTypeNum; lP++)
                    {// プロパティ情報形式数ループ
                        // プロパティ情報型式の取得
                        if (csModelPrptyInf.GetInfoType(lP, ref csKey, ref csPropertyName, ref lObjKind) == true)
                        {// プロパティ情報型式の取得が出来た場合
                            if (lObjKind == McDefine.ValKind.BOOL)
                            {// 論理型の場合
                                if (csModelPrptyInf.GetInfo(csKey, ref bVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelPropertyDataGridView.Rows.Add();   // 行追加
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[0].Value = csPropertyName.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[1].Value = bVal.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[2].Value = csKey.ToString();
                                    lPropertyTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.DOUBLE)
                            {// 実数型の場合
                                if (csModelPrptyInf.GetInfo(csKey, ref dVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelPropertyDataGridView.Rows.Add();   // 行追加
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[0].Value = csPropertyName.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[1].Value = dVal.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[2].Value = csKey.ToString();
                                    lPropertyTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.LONG)
                            {// 倍精度整数型の場合
                                if (csModelPrptyInf.GetInfo(csKey, ref lVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelPropertyDataGridView.Rows.Add();   // 行追加
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[0].Value = csPropertyName.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[1].Value = lVal.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[2].Value = csKey.ToString();
                                    lPropertyTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.STRING)
                            {// 文字列型の場合
                                if (csModelPrptyInf.GetInfo(csKey, ref sVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelPropertyDataGridView.Rows.Add();   // 行追加
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[0].Value = csPropertyName.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[1].Value = sVal.ToString();
                                    ModelPropertyDataGridView.Rows[lPropertyTypeCnt].Cells[2].Value = csKey.ToString();
                                    lPropertyTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else
                            {// その他の場合
                                continue;
                            }
                        }
                    }
                }
            }
            if (m_csInitialInfo != null)
            {// 登録初期設定情報がある場合
                HySString csKey = new HySString();
                HySString csInitialName = new HySString();
                McDefine.ValKind lObjKind = new McDefine.ValKind();
                long lInitialTypeNum = 0;
                int lInitialTypeCnt = 0;
                bool bVal = new bool();
                long lVal = new long();
                double dVal = new double();
                string sVal = "";

                ModelInitialDataGridView.Rows.Clear();

                csModelInitInf = m_csInitialInfo as McInitialInfo;

                if (csModelInitInf != null)
                {// 登録初期設定情報がある場合
                    // 初期設定情報取得
                    lInitialTypeNum = ((McInitialInfo)m_csInitialInfo).GetInfoTypeNum();     // 登録初期設定情報数取得
                    for (long lP = 1; lP <= lInitialTypeNum; lP++)
                    {// プロパティ情報形式数ループ
                        // プロパティ情報型式の取得
                        if (csModelInitInf.GetInfoType(lP, ref csKey, ref csInitialName, ref lObjKind) == true)
                        {// プロパティ情報型式の取得が出来た場合
                            if (lObjKind == McDefine.ValKind.BOOL)
                            {// 論理型の場合
                                if (csModelInitInf.GetInfo(csKey, ref bVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelInitialDataGridView.Rows.Add();    // 行追加
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[0].Value = csInitialName.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[1].Value = bVal.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[2].Value = csKey.ToString();
                                    lInitialTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.DOUBLE)
                            {// 実数型の場合
                                if (csModelInitInf.GetInfo(csKey, ref dVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelInitialDataGridView.Rows.Add();    // 行追加
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[0].Value = csInitialName.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[1].Value = dVal.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[2].Value = csKey.ToString();
                                    lInitialTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.LONG)
                            {// 倍精度整数型の場合
                                if (csModelInitInf.GetInfo(csKey, ref lVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelInitialDataGridView.Rows.Add();    // 行追加
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[0].Value = csInitialName.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[1].Value = lVal.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[2].Value = csKey.ToString();
                                    lInitialTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.STRING)
                            {// 文字列型の場合
                                if (csModelInitInf.GetInfo(csKey, ref sVal) == true)
                                {// プロパティ情報の取得が出来た場合
                                    ModelInitialDataGridView.Rows.Add();    // 行追加
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[0].Value = csInitialName.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[1].Value = sVal.ToString();
                                    ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[2].Value = csKey.ToString();
                                    lInitialTypeCnt++;                      // 行数カウンタ更新
                                }
                            }
                            else
                            {// その他の場合
                                continue;
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>設定内容チェック処理</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>ParaSet_Check();</para>
        /// </example>
        /// <param name="">無し</param>
        /// <returns>false : 正常、true : 異常</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private bool ParaSet_Check()
        {
            HySString csKey = null;
            HySString csPropatyName = new HySString();
            HySString csInitialName = new HySString();
            McDefine.ValKind lObjKind = new McDefine.ValKind();
            long lPropatyTypeNum = 0;
            long lInitialTypeNum = 0;
            bool bVal;
            long lVal;
            double dVal;
            string sVal;
            bool bBreakfg = false;

            if (m_csPropertyInfo != null)
            {// 登録プロパティ情報がある場合
                lPropatyTypeNum = ModelPropertyDataGridView.Rows.Count;     // 登録プロパティ情報数取得
                for (long lP = 0; lP < lPropatyTypeNum; lP++)
                {// プロパティ情報数ループ
                    // プロパティ情報型式の取得
                    if (ModelPropertyDataGridView.Rows[(int)lP].Cells[2].Value != null)
                    {// 情報引き出し用キー情報がある場合
                        csKey = new HySString(ModelPropertyDataGridView.Rows[(int)lP].Cells[2].Value.ToString());
                        // 型式別に登録
                        if (((McModelPropertyInfo)m_csPropertyInfo).GetInfoType(csKey, ref csPropatyName, ref lObjKind) == true)
                        {// プロパティ情報型式の取得が出来た場合
                            try
                            {
                                if (lObjKind == McDefine.ValKind.BOOL)
                                {// 論理型の場合
                                    bVal = bool.Parse(ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                }
                                else if (lObjKind == McDefine.ValKind.DOUBLE)
                                {// 実数型の場合
                                    dVal = double.Parse(ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                }
                                else if (lObjKind == McDefine.ValKind.LONG)
                                {// 倍精度整数型の場合
                                    lVal = long.Parse(ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                }
                                else if (lObjKind == McDefine.ValKind.STRING)
                                {// 文字列型の場合
                                    sVal = ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString();
                                }
                                // セルスタイルを戻す
                                ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Style.BackColor = Color.Empty;
                                ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Style.SelectionBackColor = Color.Empty;
                            }
                            catch
                            {
                                // 入力異常を出力する
                                ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Style.BackColor = Color.Red;
                                ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Style.SelectionBackColor = Color.Red;
                                ModelPropertyDataGridView.FirstDisplayedScrollingRowIndex = (int)lP;
                                bBreakfg = true;
                                TabControl1.SelectedIndex = 0;
                            }
                        }
                    }
                }
            }

            if (m_csInitialInfo != null)
            {// 登録初期設定情報がある場合
                lInitialTypeNum = ModelInitialDataGridView.Rows.Count;      // 登録初期設定情報数取得
                for (long lP = 0; lP < lInitialTypeNum; lP++)
                {// プロパティ情報数ループ
                    // プロパティ情報型式の取得
                    if (ModelInitialDataGridView.Rows[(int)lP].Cells[2].Value != null)
                    {// 情報引き出し用キー情報がある場合
                        csKey = new HySString(ModelInitialDataGridView.Rows[(int)lP].Cells[2].Value.ToString());
                        // 型式別に登録
                        if (((McInitialInfo)m_csInitialInfo).GetInfoType(csKey, ref csInitialName, ref lObjKind) == true)
                        {// プロパティ情報型式の取得が出来た場合
                            try
                            {
                                if (lObjKind == McDefine.ValKind.BOOL)
                                {// 論理型の場合
                                    bVal = bool.Parse(ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                }
                                else if (lObjKind == McDefine.ValKind.DOUBLE)
                                {// 実数型の場合
                                    dVal = double.Parse(ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                }
                                else if (lObjKind == McDefine.ValKind.LONG)
                                {// 倍精度整数型の場合
                                    lVal = long.Parse(ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                }
                                else if (lObjKind == McDefine.ValKind.STRING)
                                {// 文字列型の場合
                                    sVal = ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString();
                                }
                                // セルスタイルを戻す
                                ModelInitialDataGridView.Rows[(int)lP].Cells[1].Style.BackColor = Color.Empty;
                                ModelInitialDataGridView.Rows[(int)lP].Cells[1].Style.SelectionBackColor = Color.Empty;
                            }
                            catch
                            {
                                // 入力異常を出力する
                                ModelInitialDataGridView.Rows[(int)lP].Cells[1].Style.BackColor = Color.Red;
                                ModelInitialDataGridView.Rows[(int)lP].Cells[1].Style.SelectionBackColor = Color.Red;
                                ModelInitialDataGridView.FirstDisplayedScrollingRowIndex = (int)lP;
                                bBreakfg = true;
                                TabControl1.SelectedIndex = 1;
                            }
                        }
                    }
                }
            }

            return bBreakfg;
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>設定内容登録処理</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>ParaRegist();</para>
        /// </example>
        /// <param name="">無し</param>
        /// <returns>false : 変更無し、true : 変更有り</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private bool ParaRegist()
        {
            HySString csKey = null;
            HySString csPropatyName = new HySString();
            HySString csInitialName = new HySString();
            McDefine.ValKind lObjKind = new McDefine.ValKind();
            long lPropatyTypeNum = 0;
            long lInitialTypeNum = 0;
            bool bOrgVal = new bool();
            bool bNewVal;
            long lOrgVal = new long();
            long lNewVal;
            double dOrgVal = new double();
            double dNewVal;
            string sOrgVal = "";
            string sNewVal;
            bool bModifyFlg = false;

            if (m_csOriginalPropertyInfo != null)
            {// 登録プロパティ情報がある場合
                // 登録プロパティ情報数取得
                lPropatyTypeNum = ModelPropertyDataGridView.Rows.Count;
                for (long lP = 0; lP < lPropatyTypeNum; lP++)
                {// プロパティ情報数ループ
                    // プロパティ情報型式の取得
                    if (ModelPropertyDataGridView.Rows[(int)lP].Cells[2].Value != null)
                    {// 情報引き出し用キー情報がある場合
                        csKey = new HySString(ModelPropertyDataGridView.Rows[(int)lP].Cells[2].Value.ToString());
                        // 型式別に登録
                        if (((McModelPropertyInfo)m_csOriginalPropertyInfo).GetInfoType(csKey, ref csPropatyName, ref lObjKind) == true)
                        {// プロパティ情報型式の取得が出来た場合
                            if (lObjKind == McDefine.ValKind.BOOL)
                            {// 論理型の場合
                                bNewVal = bool.Parse(ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                ((McModelPropertyInfo)m_csOriginalPropertyInfo).GetInfo(csKey, ref bOrgVal);
                                if (bNewVal != bOrgVal)
                                {// 設定変更ありの場合
                                    ((McModelPropertyInfo)m_csPropertyInfo).SetInfo(csKey, bNewVal);
                                    bModifyFlg = true;
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.DOUBLE)
                            {// 実数型の場合
                                dNewVal = double.Parse(ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                ((McModelPropertyInfo)m_csOriginalPropertyInfo).GetInfo(csKey, ref dOrgVal);
                                if (dNewVal != dOrgVal)
                                {// 設定変更ありの場合
                                    ((McModelPropertyInfo)m_csPropertyInfo).SetInfo(csKey, dNewVal);
                                    bModifyFlg = true;
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.LONG)
                            {// 倍精度整数型の場合
                                lNewVal = long.Parse(ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                ((McModelPropertyInfo)m_csOriginalPropertyInfo).GetInfo(csKey, ref lOrgVal);
                                if (lNewVal != lOrgVal)
                                {// 設定変更ありの場合
                                    ((McModelPropertyInfo)m_csPropertyInfo).SetInfo(csKey, lNewVal);
                                    bModifyFlg = true;
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.STRING)
                            {// 文字列型の場合
                                sNewVal = ModelPropertyDataGridView.Rows[(int)lP].Cells[1].Value.ToString();
                                ((McModelPropertyInfo)m_csOriginalPropertyInfo).GetInfo(csKey, ref sOrgVal);
                                if (sNewVal != sOrgVal)
                                {// 設定変更ありの場合
                                    ((McModelPropertyInfo)m_csPropertyInfo).SetInfo(csKey, sNewVal);
                                    bModifyFlg = true;
                                }
                            }
                        }
                    }
                }
            }
            if (m_csOriginalInitialInfo != null)
            {// 登録初期設定情報がある場合
                // 登録初期設定情報数取得
                lInitialTypeNum = ModelInitialDataGridView.Rows.Count;
                for (long lP = 0; lP < lInitialTypeNum; lP++)
                {// プロパティ情報数ループ
                    // 初期設定情報型式の取得
                    if (ModelInitialDataGridView.Rows[(int)lP].Cells[2].Value != null)
                    {// 情報引き出し用キー情報がある場合
                        csKey = new HySString(ModelInitialDataGridView.Rows[(int)lP].Cells[2].Value.ToString());
                        // 型式別に登録
                        if (((McInitialInfo)m_csOriginalInitialInfo).GetInfoType(csKey, ref csPropatyName, ref lObjKind) == true)
                        {// プロパティ情報型式の取得が出来た場合
                            if (lObjKind == McDefine.ValKind.BOOL)
                            {// 論理型の場合
                                bNewVal = bool.Parse(ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                ((McInitialInfo)m_csOriginalInitialInfo).GetInfo(csKey, ref bOrgVal);
                                if (bNewVal != bOrgVal)
                                {// 設定変更ありの場合
                                    ((McInitialInfo)m_csInitialInfo).SetInfo(csKey, bNewVal);
                                    bModifyFlg = true;
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.DOUBLE)
                            {// 実数型の場合
                                dNewVal = double.Parse(ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                ((McInitialInfo)m_csOriginalInitialInfo).GetInfo(csKey, ref dOrgVal);
                                if (dNewVal != dOrgVal)
                                {// 設定変更ありの場合
                                    ((McInitialInfo)m_csInitialInfo).SetInfo(csKey, dNewVal);
                                    bModifyFlg = true;
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.LONG)
                            {// 倍精度整数型の場合
                                lNewVal = long.Parse(ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString());
                                ((McInitialInfo)m_csOriginalInitialInfo).GetInfo(csKey, ref lOrgVal);
                                if (lNewVal != lOrgVal)
                                {// 設定変更ありの場合
                                    ((McInitialInfo)m_csInitialInfo).SetInfo(csKey, lNewVal);
                                    bModifyFlg = true;
                                }
                            }
                            else if (lObjKind == McDefine.ValKind.STRING)
                            {// 文字列型の場合
                                sNewVal = ModelInitialDataGridView.Rows[(int)lP].Cells[1].Value.ToString();
                                ((McInitialInfo)m_csOriginalInitialInfo).GetInfo(csKey, ref sOrgVal);
                                if (sNewVal != sOrgVal)
                                {// 設定変更ありの場合
                                    ((McInitialInfo)m_csInitialInfo).SetInfo(csKey, sNewVal);
                                    bModifyFlg = true;
                                }
                            }
                        }
                    }
                }
            }
            return bModifyFlg;
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>設定処理</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>ParaSet_Click(sender,e);</para>
        /// </example>
        /// <param name="sender">object</param>
        /// <param name="e">Event</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private void ParaSet_Click(object sender, EventArgs e)
        {
            if (ParaSet_Check() == true)
            {// 設定値に異常がある場合
                return;
            }

            // 設定内容登録
            if (ParaRegist() == true)
            {// 変更がある場合
                DialogResult = DialogResult.OK;
            }
            else
            {// 変更がない場合
                DialogResult = DialogResult.Cancel;
            }

            Close();
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>キャンセル処理</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>Cancel_Click(sender,e);</para>
        /// </example>
        /// <param name="sender">Object</param>
        /// <param name="e">Event</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private void Cancel_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>ファイル入力処理</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>FileOpen_Click(sender,e);</para>
        /// </example>
        /// <param name="sender">Object</param>
        /// <param name="e">Event</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private void FileOpen_Click(object sender, EventArgs e)
        {
            if (m_csPropertyInfo != null || m_csInitialInfo != null)
            {// プロパティ情報・初期設定情報があった場合
                OpenFileDialog.FileName = "";
                OpenFileDialog.Filter = Properties.McDotNetViewerResources.FILE_DLG_FILTER_XML_CSV;//"ＣＳＶ ファイル (*.csv)|*.csv|すべてのファイル (*.*)|*.*"
                if (OpenFileDialog.ShowDialog(this) == DialogResult.OK)
                {// 入力ファイルを選択した場合
                    FileName.Text = OpenFileDialog.FileName;        // テキスト表示
                    // ファイル入力
                    string csFileName = OpenFileDialog.FileName;    // 入力ファイルフルパス名

                    HySFile csFile = new HySFile((new HySString(csFileName)));
                    if (csFile.Exist() == true)
                    {// 既存ファイルが有れば
                        if (csFileName.IndexOf(".csv", csFileName.Length - 4, StringComparison.CurrentCultureIgnoreCase) >= 0)
                        {// CSVファイルの場合
                            HySString sOut = new HySString();
                            string[] sInWk;
                            int lPropatyTypeCnt = 0;
                            int lInitialTypeCnt = 0;

                            if (csFile.Open(HySFile.OPEN_MODE.OPEN, HySFile.READ_WRITE_MODE.READ, HySFile.DIRECTORY_MODE.NOT_MK_DIR) == 0)
                            {// 既存CSVファイルを正常に開ければ
                                lPropatyTypeCnt = ModelPropertyDataGridView.Rows.Count; // 登録プロパティ情報数取得
                                for (long lP = 0; lP < lPropatyTypeCnt; lP++)
                                {// 行がある場合
                                    ModelPropertyDataGridView.Rows.RemoveAt(0);         // 先頭行削除
                                }
                                lPropatyTypeCnt = 0;

                                lInitialTypeCnt = ModelInitialDataGridView.Rows.Count;  // 登録初期設定情報数取得
                                for (long lP = 0; lP < lInitialTypeCnt; lP++)
                                {// 行がある場合
                                    ModelInitialDataGridView.Rows.RemoveAt(0);          // 先頭行削除
                                }
                                lInitialTypeCnt = 0;

                                while (csFile.ReadText(ref sOut) != 0)
                                {// １行取得
                                    sInWk = sOut.ToString().Split(',');
                                    if (sInWk.LongLength == 4)
                                    {// パラメータ情報項目数と一致した場合
                                        if (sInWk[0] != "#")
                                        {// コメント行以外の場合
                                            if (sInWk[0] == "[P]")
                                            {//プロパティ情報
                                                ModelPropertyDataGridView.Rows.Add();       // 行追加
                                                ModelPropertyDataGridView.Rows[lPropatyTypeCnt].Cells[0].Value = sInWk[1];
                                                ModelPropertyDataGridView.Rows[lPropatyTypeCnt].Cells[1].Value = sInWk[2];
                                                ModelPropertyDataGridView.Rows[lPropatyTypeCnt].Cells[2].Value = sInWk[3];
                                                lPropatyTypeCnt++;
                                            }
                                            else if (sInWk[0] == "[I]")
                                            {//初期設定情報
                                                ModelInitialDataGridView.Rows.Add();        // 行追加
                                                ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[0].Value = sInWk[1];
                                                ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[1].Value = sInWk[2];
                                                ModelInitialDataGridView.Rows[lInitialTypeCnt].Cells[2].Value = sInWk[3];
                                                lInitialTypeCnt++;
                                            }
                                        }
                                    }
                                }
                                csFile.Close();
                            }
                        }
                        else if (csFileName.IndexOf(".xml", csFileName.Length - 4, StringComparison.CurrentCultureIgnoreCase) >= 0)
                        {// Xmlファイルの場合
                            HySXmlReader csXmlReader = new HySXmlReader(csFileName);
                            HySXmlNode csXmlRootNode = csXmlReader.GetRootNode();
                            HySXmlNodeList csXmlChildNodeList = null;

                            csXmlChildNodeList = csXmlRootNode.GetChildNodeListByTagName(McDefine.xml_PROPERTY);
                            if (csXmlChildNodeList.GetCount() > 0)
                            {// ノード数が０より大きい場合
                                HySString csKey = new HySString();
                                HySString csPropertyName = new HySString();
                                McDefine.ValKind lObjKind = new McDefine.ValKind();
                                bool bVal = new bool();
                                long lVal = new long();
                                double dVal = new double();
                                string sVal = "";

                                McPropertyInfo csXmlInWorkInfo = new McPropertyInfo(m_csPropertyInfo.GetFactoryID(), (HySObjectKind)m_csPropertyInfo.GetModelKind());
                                csXmlInWorkInfo.XmlIN(csXmlChildNodeList.GetNode(0));
                                for (int iLp = 0; iLp < ModelPropertyDataGridView.Rows.Count; iLp++)
                                {// プロパティ情報数ループ
                                    csKey = new HySString(ModelPropertyDataGridView.Rows[iLp].Cells[2].Value.ToString());
                                    if (csXmlInWorkInfo.GetInfoType(csKey, ref csPropertyName, ref lObjKind) == true)
                                    {// プロパティ情報型式の取得が出来た場合
                                        if (lObjKind == McDefine.ValKind.BOOL)
                                        {// 論理型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref bVal);
                                            ModelPropertyDataGridView.Rows[iLp].Cells[0].Value = csPropertyName.ToString();
                                            ModelPropertyDataGridView.Rows[iLp].Cells[1].Value = bVal.ToString();
                                        }
                                        else if (lObjKind == McDefine.ValKind.DOUBLE)
                                        {// 実数型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref dVal);
                                            ModelPropertyDataGridView.Rows[iLp].Cells[0].Value = csPropertyName.ToString();
                                            ModelPropertyDataGridView.Rows[iLp].Cells[1].Value = dVal.ToString();
                                        }
                                        else if (lObjKind == McDefine.ValKind.LONG)
                                        {// 倍精度整数型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref lVal);
                                            ModelPropertyDataGridView.Rows[iLp].Cells[0].Value = csPropertyName.ToString();
                                            ModelPropertyDataGridView.Rows[iLp].Cells[1].Value = lVal.ToString();
                                        }
                                        else if (lObjKind == McDefine.ValKind.STRING)
                                        {// 文字列型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref sVal);
                                            ModelPropertyDataGridView.Rows[iLp].Cells[0].Value = csPropertyName.ToString();
                                            ModelPropertyDataGridView.Rows[iLp].Cells[1].Value = sVal;
                                        }
                                    }
                                }
                            }

                            csXmlChildNodeList = csXmlRootNode.GetChildNodeListByTagName(McDefine.xml_INITIAL_SET);
                            if (csXmlChildNodeList.GetCount() > 0)
                            {// ノード数が０より大きい場合
                                HySString csKey = new HySString();
                                HySString csInitialName = new HySString();
                                McDefine.ValKind lObjKind = new McDefine.ValKind();
                                bool bVal = new bool();
                                long lVal = new long();
                                double dVal = new double();
                                string sVal = "";

                                McInitialInfo csXmlInWorkInfo = new McInitialInfo(m_csInitialInfo.GetFactoryID(), (HySObjectKind)m_csInitialInfo.GetModelKind());
                                csXmlInWorkInfo.XmlIN(csXmlChildNodeList.GetNode(0));
                                for (int iLp = 0; iLp < ModelInitialDataGridView.Rows.Count; iLp++)
                                {// プロパティ情報数ループ
                                    csKey = new HySString(ModelInitialDataGridView.Rows[iLp].Cells[2].Value.ToString());
                                    if (csXmlInWorkInfo.GetInfoType(csKey, ref csInitialName, ref lObjKind) == true)
                                    {// プロパティ情報型式の取得が出来た場合
                                        if (lObjKind == McDefine.ValKind.BOOL)
                                        {// 論理型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref bVal);
                                            ModelInitialDataGridView.Rows[iLp].Cells[0].Value = csInitialName.ToString();
                                            ModelInitialDataGridView.Rows[iLp].Cells[1].Value = bVal.ToString();
                                        }
                                        else if (lObjKind == McDefine.ValKind.DOUBLE)
                                        {// 実数型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref dVal);
                                            ModelInitialDataGridView.Rows[iLp].Cells[0].Value = csInitialName.ToString();
                                            ModelInitialDataGridView.Rows[iLp].Cells[1].Value = dVal.ToString();
                                        }
                                        else if (lObjKind == McDefine.ValKind.LONG)
                                        {// 倍精度整数型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref lVal);
                                            ModelInitialDataGridView.Rows[iLp].Cells[0].Value = csInitialName.ToString();
                                            ModelInitialDataGridView.Rows[iLp].Cells[1].Value = lVal.ToString();
                                        }
                                        else if (lObjKind == McDefine.ValKind.STRING)
                                        {// 文字列型の場合
                                            csXmlInWorkInfo.GetInfo(csKey, ref sVal);
                                            ModelInitialDataGridView.Rows[iLp].Cells[0].Value = csInitialName.ToString();
                                            ModelInitialDataGridView.Rows[iLp].Cells[1].Value = sVal;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// <para>method outline:</para>
        /// <para>ファイル出力処理</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>FileSave_Click(sender,e);</para>
        /// </example>
        /// <param name="sender">Object</param>
        /// <param name="e">Event</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private void FileSave_Click(object sender, EventArgs e)
        {
            if (ParaSet_Check() == true)
            {// 設定情報に異常がある場合
                return;
            }

            if (m_csPropertyInfo != null || m_csInitialInfo != null)
            {  // プロパティ情報・初期設定情報があった場合
                SaveFileDialog.FileName = FileName.Text;
                SaveFileDialog.Filter = Properties.McDotNetViewerResources.FILE_DLG_FILTER_XML;//"ＣＳＶ ファイル (*.csv)|*.csv|すべてのファイル (*.*)|*.*"
                if (SaveFileDialog.ShowDialog(this) == DialogResult.OK)
                {// 出力ファイルを選択した場合
                    string csFileName = SaveFileDialog.FileName;    // 出力ファイルフルパス名

                    if (csFileName.Substring(csFileName.Length - 4, 4) != Properties.McDotNetViewerResources.FILE_DLG_EXTENSION_XML)
                    {// 拡張子が付いていない場合
                        csFileName += Properties.McDotNetViewerResources.FILE_DLG_EXTENSION_XML;
                    }

                    FileName.Text = csFileName;            // テキスト表示

                    HySXmlWriter csXmlWriter = new HySXmlWriter(csFileName);

                    HySXmlNode csRootNode = csXmlWriter.CreateRoot("PropertyRoot");

                    // プロパティ出力指定
                    McPropertyInfoBase.SetXmlOutFlg(McDefine.HYMCO_MODEL_STRUCTINFO_WRITE_ALL);
                    
                    if (ModelPropertyDataGridView.Rows.Count > 0)
                    {// プロパティ情報数が０より大きい場合
                        McPropertyInfo csXmlOutWorkInfo = new McPropertyInfo(m_csPropertyInfo.GetFactoryID(), (HySObjectKind)m_csPropertyInfo.GetModelKind());

                        HySString csKey = new HySString();
                        HySString csPropertyName = new HySString();
                        McDefine.ValKind lObjKind = new McDefine.ValKind();
                        bool bVal = new bool();
                        long lVal = new long();
                        double dVal = new double();
                        string sVal = "";

                        for (int iLp = 0; iLp < ModelPropertyDataGridView.Rows.Count; iLp++)
                        {// プロパティ情報数ループ
                            if (ModelPropertyDataGridView.Rows[iLp].Cells[2].Value != null)
                            {// 情報引き出し用キー情報がある場合
                                csKey = new HySString(ModelPropertyDataGridView.Rows[iLp].Cells[2].Value.ToString());
                                if (((McPropertyInfo)m_csPropertyInfo).GetInfoType(csKey, ref csPropertyName, ref lObjKind) == true)
                                {// プロパティ情報型式の取得が出来た場合
                                    csXmlOutWorkInfo.AddInfoType(csKey, csPropertyName, lObjKind);
                                    if (lObjKind == McDefine.ValKind.BOOL)
                                    {// 論理型の場合
                                        bVal = bool.Parse(ModelPropertyDataGridView.Rows[iLp].Cells[1].Value.ToString());
                                        csXmlOutWorkInfo.SetInfo(csKey, bVal);
                                    }
                                    else if (lObjKind == McDefine.ValKind.DOUBLE)
                                    {// 実数型の場合
                                        dVal = double.Parse(ModelPropertyDataGridView.Rows[iLp].Cells[1].Value.ToString());
                                        csXmlOutWorkInfo.SetInfo(csKey, dVal);
                                    }
                                    else if (lObjKind == McDefine.ValKind.LONG)
                                    {// 倍精度整数型の場合
                                        lVal = long.Parse(ModelPropertyDataGridView.Rows[iLp].Cells[1].Value.ToString());
                                        csXmlOutWorkInfo.SetInfo(csKey, lVal);
                                    }
                                    else if (lObjKind == McDefine.ValKind.STRING)
                                    {// 文字列型の場合
                                        sVal = ModelPropertyDataGridView.Rows[iLp].Cells[1].Value.ToString();
                                        csXmlOutWorkInfo.SetInfo(csKey, sVal);
                                    }
                                }
                            }
                        }
                        csRootNode.AppendChild(csXmlOutWorkInfo.XmlOUT(ref csXmlWriter));
                    }

                    if (ModelInitialDataGridView.Rows.Count > 0)
                    {// プロパティ情報数が０より大きい場合
                        McInitialInfo csXmlOutWorkInfo = new McInitialInfo(m_csInitialInfo.GetFactoryID(), (HySObjectKind)m_csInitialInfo.GetModelKind());

                        HySString csKey = new HySString();
                        HySString csInitialName = new HySString();
                        McDefine.ValKind lObjKind = new McDefine.ValKind();
                        bool bVal = new bool();
                        long lVal = new long();
                        double dVal = new double();
                        string sVal = "";

                        for (int iLp = 0; iLp < ModelInitialDataGridView.Rows.Count; iLp++)
                        {// プロパティ情報数ループ
                            if (ModelInitialDataGridView.Rows[iLp].Cells[2].Value != null)
                            {// 情報引き出し用キー情報がある場合
                                csKey = new HySString(ModelInitialDataGridView.Rows[iLp].Cells[2].Value.ToString());
                                if (((McPropertyInfo)m_csInitialInfo).GetInfoType(csKey, ref csInitialName, ref lObjKind) == true)
                                {// プロパティ情報型式の取得が出来た場合
                                    csXmlOutWorkInfo.AddInfoType(csKey, csInitialName, lObjKind);
                                    if (lObjKind == McDefine.ValKind.BOOL)
                                    {// 論理型の場合
                                        bVal = bool.Parse(ModelInitialDataGridView.Rows[iLp].Cells[1].Value.ToString());
                                        csXmlOutWorkInfo.SetInfo(csKey, bVal);
                                    }
                                    else if (lObjKind == McDefine.ValKind.DOUBLE)
                                    {// 実数型の場合
                                        dVal = double.Parse(ModelInitialDataGridView.Rows[iLp].Cells[1].Value.ToString());
                                        csXmlOutWorkInfo.SetInfo(csKey, dVal);
                                    }
                                    else if (lObjKind == McDefine.ValKind.LONG)
                                    {// 倍精度整数型の場合
                                        lVal = long.Parse(ModelInitialDataGridView.Rows[iLp].Cells[1].Value.ToString());
                                        csXmlOutWorkInfo.SetInfo(csKey, lVal);
                                    }
                                    else if (lObjKind == McDefine.ValKind.STRING)
                                    {// 文字列型の場合
                                        sVal = ModelInitialDataGridView.Rows[iLp].Cells[1].Value.ToString();
                                        csXmlOutWorkInfo.SetInfo(csKey, sVal);
                                    }
                                }
                            }
                        }
                        csRootNode.AppendChild(csXmlOutWorkInfo.XmlOUT(ref csXmlWriter));
                    }

                    csXmlWriter.Save();
                }
            }
        }

        /// <summary>
        /// <para>method outline</para>
        /// <para>TabControl背景色設定</para>
        /// </summary>
        /// <example>
        /// <para>usage:</para>
        /// <para>TabControl_DrawItem(sender, e)</para>
        /// </example>
        /// <param name="sender">object</param>
        /// <param name="e">Event</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks>
        /// <para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private void TabControl_DrawItem(object sender, DrawItemEventArgs e)
        {
            //対象のTabControlを取得 
            TabControl csTab = (TabControl)sender;

            //タブページのテキストを取得 
            string csTxt = csTab.TabPages[e.Index].Text;

            //タブのテキストは黒色とする 
            Brush csForeBrush = new SolidBrush(Color.Black);

            Font csTxtFont;        //タブのテキストのFont
            Brush csBackBrush;     //タブのテキストと背景を描画するためのブラシ 

            //選択タブ判定 
            if (e.State == DrawItemState.Selected)
            {// タブが選択されている場合
                //選択されているタブの背景を白色とする 
                csBackBrush = new SolidBrush(Color.White);

                //タブのテキストのFontを太字にする
                csTxtFont = new Font(csTab.TabPages[e.Index].Font, FontStyle.Bold);
            }
            else
            {// タブが選択されていない場合
                //選択されていないタブの背景を背景標準色とする 
                csBackBrush = new SolidBrush(csTab.TabPages[e.Index].BackColor);

                //タブのテキストのFontを標準にする
                csTxtFont = new Font(csTab.TabPages[e.Index].Font, FontStyle.Regular);
            }

            //描画座標・サイズ取得
            Rectangle csRect = e.Bounds;
            csRect.Y = csRect.Y + 1;

            //StringFormatを作成 
            StringFormat csfForm = new StringFormat();

            //中央に表示する 
            csfForm.Alignment = StringAlignment.Center;
            csfForm.LineAlignment = StringAlignment.Center;

            //背景の描画 
            e.Graphics.FillRectangle(csBackBrush, e.Bounds);

            //Textの描画 
            e.Graphics.DrawString(csTxt, csTxtFont, csForeBrush, csRect, csfForm);

            //後処理
            csfForm.Dispose();      //StringFormat
            csTxtFont.Dispose();    //タブのテキストのFont
            csBackBrush.Dispose();  //タブのテキストと背景を描画するためのブラシ 
            csForeBrush.Dispose();  //タブのテキストと背景を描画するためのブラシ 
            csTxt = null;           //タブページのテキスト
        }

        /// <summary><para>method outline</para>
        /// <para>ヘルプリンクイベント</para>
        /// </summary>
        /// <example><para>usage:</para>
        /// <para>Help_Button_Click(sender, e)</para>
        /// </example>
        /// <param name="sender">object</param>
        /// <param name="e">Event</param>
        /// <returns>無し</returns>
        /// <exception cref="">無し</exception>
        /// <remarks><para>remarks:</para>
        /// <para>無し</para>
        /// </remarks>
        private void Help_Button_Click(object sender, EventArgs e)
        {
            // ヘルプ画面の表示
            HySShowHelpNavigator.ShowHelpNavigator(HySShowHelpNavigator.NAV_MSG_MODEL_0003, this.Parent);
        }
    }
}