/// <summary>
        /// 判断按钮对应的控件是否有空值
        /// </summary>
        /// <param name="btnClass">按钮控件实体类</param>
        /// <returns></returns>
        private static bool HasCtrlsNull(ButtonClass btnClass)
        {
            bool flag = false;

            if (btnClass._Controls == null || btnClass._Controls.Count < 0)
            {
                //窗体中所有控件
                Form FormOwner = UtilClass.SearchOwner(btnClass._FrmControl) as Form;
                List<Control> FormControls = UtilClass.InitControls(FormOwner);

                string[] ctrlTmps = btnClass._CtrlStr.Split(',');

                foreach (string item in ctrlTmps)
                {
                    Control FormControl = FormControls.Where(n => n.Name.Equals(item)).FirstOrDefault();

                    if (FormControl != null && FormControl.Name.Equals(item))
                    {
                        ControlClass SubCtrl = new ControlClass();
                        SubCtrl._NameSpace = btnClass._NameSpace;
                        SubCtrl._Class = btnClass._Class;
                        SubCtrl._Name = item;
                        SubCtrl._ControlType = FormControl.GetType().Name;
                        SubCtrl._FrmControl = FormControl;

                        btnClass._Controls.Add(SubCtrl);
                    }
                }
            }

            string tipFailureMsg = "请完整输入必填项信息!";
            string tipSuccessMsg = string.Empty;
            if (null != btnClass._Tips[1])
            {
                tipFailureMsg = btnClass._Tips[1].ToString();
            }
            if (null != btnClass._Tips[0])
            {
                tipSuccessMsg = btnClass._Tips[0].ToString();
            }

            foreach (ControlClass item in btnClass._Controls)
            {
                //Control ctrl = item._FrmControl;
                //获取窗体对应控件
                Control ctrl = item._FrmControl;
                if (ctrl != null)
                {
                    switch (item._ControlType.Trim().ToLower())
                    {
                        case "textbox":
                            TextBox textBox = ctrl as TextBox;
                            if (string.IsNullOrEmpty(textBox.Text))
                            {
                                if (IsCommentShow)
                                {
                                    TipForm tip = new TipForm(btnClass._FrmControl, tipFailureMsg);
                                    tip.Show();

                                    //设置焦点
                                    textBox.Focus();
                                }

                                flag = true;

                                //切换到指定TabPage
                                TabPage tabPage = UtilClass.SearchOwnerTabPage(ctrl) as TabPage;
                                TabControl tabControl = tabPage.Parent as TabControl;
                                if (tabControl.SelectedTab != tabPage)
                                {
                                    tabControl.SelectedTab = tabPage;
                                }
                                break;
                            }
                            break;
                        case "datagridview":
                            DataGridView grid = ctrl as DataGridView;
                            if (grid.Rows.Count <= 0 || grid.NewRowIndex == 0)
                            {
                                if (IsCommentShow)
                                {
                                    TipForm tip = new TipForm(btnClass._FrmControl, tipFailureMsg);
                                    tip.Show();

                                    grid.Focus();
                                }
                                flag = true;

                                //切换到指定TabPage
                                TabPage tabPage = UtilClass.SearchOwnerTabPage(ctrl) as TabPage;
                                TabControl tabControl = tabPage.Parent as TabControl;
                                if (tabControl.SelectedTab != tabPage)
                                {
                                    tabControl.SelectedTab = tabPage;
                                }
                            }

                            //判断必填数据列
                            if (grid.Rows.Count > 0)
                            {
                                int ColCount = grid.Columns.Count;

                                //获取DataGridView必填数据列索引
                                List<int> ColIndex = item._NotNullIndex;

                                foreach (DataGridViewRow row in grid.Rows)
                                {
                                    //忽略新行
                                    if (row.Index == grid.NewRowIndex)
                                        continue;

                                    for (int c = 0; c < ColIndex.Count; c++)
                                    {
                                        if (row.Cells[ColIndex[c]].Value == null || string.IsNullOrEmpty(row.Cells[ColIndex[c]].Value.ToString()))
                                        {
                                            flag = true;

                                            //切换到指定TabPage
                                            TabPage tabPage = UtilClass.SearchOwnerTabPage(ctrl) as TabPage;
                                            TabControl tabControl = tabPage.Parent as TabControl;
                                            if (tabControl.SelectedTab != tabPage)
                                            {
                                                tabControl.SelectedTab = tabPage;
                                            }

                                            TipForm tip = new TipForm(grid, string.Format("DataGridView的第{0}列不能为空!", ColIndex[c] + 1));
                                            tip.Show();

                                            grid.CurrentCell = row.Cells[ColIndex[c]];
                                            grid.BeginEdit(true);

                                            break;
                                        }
                                    }
                                    if (flag)
                                    {
                                        break;  //若一出现空数据,即刻跳出循环
                                    }
                                }
                            }
                            break;
                        default:

                            break;
                    }
                }

                if (flag)
                {
                    ////切换到指定TabPage
                    //TabPage tabPage = UtilClass.SearchOwnerTabPage(ctrl) as TabPage;

                    //TabControl tabControl = tabPage.Parent as TabControl;

                    //if (tabControl.SelectedTab != tabPage)
                    //{
                    //    tabControl.SelectedTab = tabPage;
                    //}

                    break;  //出现没有填内容的直接跳出循环
                }
            }

            if (!flag)
            {
                if (!string.IsNullOrEmpty(tipSuccessMsg))
                {
                    TipForm tip = new TipForm(btnClass._FrmControl, tipSuccessMsg);
                    tip.Show();
                }
            }

            return flag;
        }
        /// <summary>
        /// 从Node获取控件实体
        /// </summary>
        /// <param name="_xmlpath">Xml文件路径</param>
        /// <param name="node">节点信息</param>
        /// <param name="frmCtrl">对应窗体中的控件</param>
        /// <returns></returns>
        private static BaseCtrl GetControl(string _xmlpath, XmlNode node, Control frmCtrl = null)
        {
            BaseCtrl ctrl;

            //查找到节点
            if (node != null)
            {
                if (xmlHelper.IsAttrExist(node, "controltype"))
                {

                    #region 以前版本
                    string controlType = node.Attributes["controltype"].Value.Trim();
                    switch (controlType.ToLower())
                    {
                        case "textbox":
                            {
                                ControlClass c = new ControlClass();

                                //命名空间
                                if (xmlHelper.IsAttrExist(node, "namespace"))
                                {
                                    c._NameSpace = node.Attributes["namespace"].Value.Trim();
                                }
                                else if (node.ParentNode != null && node.ParentNode.ParentNode != null)
                                {
                                    XmlNode NameSpaceNode = node.ParentNode.ParentNode;
                                    c._NameSpace = NameSpaceNode.Name;
                                }
                                //类
                                if (xmlHelper.IsAttrExist(node, "class"))
                                {
                                    c._Class = node.Attributes["class"].Value.Trim();
                                }
                                else if (node.ParentNode != null)
                                {
                                    XmlNode ClassNode = node.ParentNode;
                                    c._Class = ClassNode.Name;
                                }
                                //控件
                                if (!string.IsNullOrEmpty(node.Name))
                                {
                                    c._Name = node.Name.Trim();
                                }
                                //控件类型
                                c._ControlType = controlType;
                                //数据类型
                                if (xmlHelper.IsAttrExist(node, "datatype"))
                                {
                                    string typename = node.Attributes["datatype"].Value.Trim();

                                    CtrlAttr attr = GetAttr(_xmlpath, c._ControlType, typename);

                                    if (attr != null)
                                    {
                                        c._TypeName = typename;
                                        c._Attr = attr;
                                    }
                                    else
                                    {
                                        MessageBox.Show("没有找到指定类型名的数据类型!");
                                    }
                                }
                                //事件类型
                                if (xmlHelper.IsAttrExist(node, "eventtype"))
                                {
                                    c._EventType = node.Attributes["eventtype"].Value.Trim().ToUpper();
                                }
                                //if (!string.IsNullOrEmpty(node.Attributes["requiretype"].Value))
                                //{
                                //    c._RequireType = node.Attributes["requiretype"].Value.Trim();
                                //}

                                if (frmCtrl != null && frmCtrl.Name.Equals(c._Name))
                                {
                                    c._FrmControl = frmCtrl;
                                }

                                ctrl = c;
                            }
                            break;
                        case "datagridview":
                            {
                                ControlClass c = new ControlClass();

                                //命名空间
                                if (xmlHelper.IsAttrExist(node, "namespace"))
                                {
                                    c._NameSpace = node.Attributes["namespace"].Value.Trim();
                                }
                                else if (node.ParentNode != null && node.ParentNode.ParentNode != null)
                                {
                                    XmlNode NameSpaceNode = node.ParentNode.ParentNode;
                                    c._NameSpace = NameSpaceNode.Name;
                                }
                                //类
                                if (xmlHelper.IsAttrExist(node, "class"))
                                {
                                    c._Class = node.Attributes["class"].Value.Trim();
                                }
                                else if (node.ParentNode != null)
                                {
                                    XmlNode ClassNode = node.ParentNode.ParentNode;
                                    c._Class = ClassNode.Name;
                                }
                                //控件
                                if (!string.IsNullOrEmpty(node.Name))
                                {
                                    c._Name = node.Name.Trim();
                                }
                                //控件类型
                                c._ControlType = controlType;
                                //数据类型
                                if (xmlHelper.IsAttrExist(node, "datatype"))
                                {
                                    string typename = node.Attributes["datatype"].Value.Trim();

                                    CtrlAttr attr = GetAttr(_xmlpath, c._ControlType, typename);

                                    if (attr != null)
                                    {
                                        c._TypeName = typename;
                                        c._Attr = attr;
                                    }
                                    else
                                    {
                                        MessageBox.Show("没有找到指定类型名的数据类型!");
                                    }
                                }
                                //获取DataGridView数据列可空限制
                                if (!string.IsNullOrEmpty(node.Attributes["notnullindex"].Value.Trim()))
                                {
                                    string tmp = node.Attributes["notnullindex"].Value.Trim();
                                    tmp.Replace(',', ',');

                                    string[] indexTemp = tmp.Split(',');

                                    foreach (string item in indexTemp)
                                    {
                                        int idx;
                                        if (Int32.TryParse(item.Trim(), out idx))
                                        {
                                            c._NotNullIndex.Add(idx);
                                        }
                                        else
                                        {
                                            MessageBox.Show("DataGridView:" + c._Name + "非空列索引有误!");
                                        }
                                    }

                                    //string typename = node.Attributes["nulltype"].Value.Trim();

                                    //CtrlAttr atemp = GetAttr(_xmlpath, c._ControlType, typename);

                                    //if (atemp != null && atemp is AttrDataGridView)
                                    //{
                                    //    AttrDataGridView gTemp = atemp as AttrDataGridView;

                                    //    foreach (AttrInfo item in gTemp.Attr)
                                    //    {
                                    //        c._NullType.Add(item);
                                    //    }
                                    //}

                                }

                                if (frmCtrl != null && frmCtrl.Name.Equals(c._Name))
                                {
                                    c._FrmControl = frmCtrl;
                                }

                                ctrl = c;
                            }
                            break;
                        case "button":
                            {
                                ButtonClass btn = new ButtonClass();

                                //命名空间
                                if (xmlHelper.IsAttrExist(node, "namespace"))
                                {
                                    btn._NameSpace = node.Attributes["namespace"].Value.Trim();
                                }
                                else if (node.ParentNode != null && node.ParentNode.ParentNode != null)
                                {
                                    XmlNode NameSpaceNode = node.ParentNode.ParentNode;
                                    btn._NameSpace = NameSpaceNode.Name;
                                }
                                //类
                                if (xmlHelper.IsAttrExist(node, "class"))
                                {
                                    btn._Class = node.Attributes["class"].Value.Trim();
                                }
                                else if (node.ParentNode != null)
                                {
                                    XmlNode ClassNode = node.ParentNode;
                                    btn._Class = ClassNode.Name;
                                }
                                //控件
                                if (!string.IsNullOrEmpty(node.Name))
                                {
                                    btn._Name = node.Name.Trim();
                                }
                                //控件类型
                                btn._ControlType = controlType;
                                //验证控件
                                if (xmlHelper.IsAttrExist(node, "controls"))
                                {
                                    //edit by dwq 2015-06-12 按钮数据实体需要关联当前窗体控件
                                    btn._CtrlStr = node.Attributes["controls"].Value.Trim();

                                    //窗体中所有控件
                                    Form FormOwner = UtilClass.SearchOwner(frmCtrl) as Form;
                                    List<Control> FormControls = UtilClass.InitControls(FormOwner);

                                    string[] ctrlTmps = node.Attributes["controls"].Value.Trim().Split(',');

                                    foreach (string item in ctrlTmps)
                                    {
                                        Control FormControl = FormControls.Where(n => n.Name.Equals(item)).FirstOrDefault();

                                        if (FormControl != null && FormControl.Name.Equals(item))
                                        {
                                            ControlClass SubCtrl = new ControlClass();
                                            SubCtrl._NameSpace = btn._NameSpace;
                                            SubCtrl._Class = btn._Class;
                                            SubCtrl._Name = item;
                                            SubCtrl._ControlType = FormControl.GetType().Name;
                                            SubCtrl._FrmControl = FormControl;

                                            btn._Controls.Add(SubCtrl);
                                        }
                                    }
                                }
                                //提示信息
                                if (xmlHelper.IsAttrExist(node, "tip"))
                                {
                                    string tipname = node.Attributes["tip"].Value.ToString().Trim();

                                    btn._TipName = tipname;
                                    btn._Tips = GetTip(_xmlpath, tipname);
                                }

                                if (frmCtrl != null && frmCtrl.Name.Equals(btn._Name))
                                {
                                    btn._FrmControl = frmCtrl;
                                }

                                ctrl = btn;
                            }
                            break;
                        default:
                            ctrl = null;
                            break;
                    }
                    #endregion
                }
                else
                {
                    #region Xml精简后
                    if (frmCtrl != null)
                    {
                        string ctrlType = frmCtrl.GetType().Name;
                        switch (ctrlType.ToLower())
                        {
                            case "textbox":
                                {
                                    ControlClass c = new ControlClass();

                                    //命名空间
                                    if (xmlHelper.IsAttrExist(node, "namespace"))
                                    {
                                        c._NameSpace = node.Attributes["namespace"].Value.Trim();
                                    }
                                    else if (node.ParentNode != null && node.ParentNode.ParentNode != null)
                                    {
                                        XmlNode NameSpaceNode = node.ParentNode.ParentNode;
                                        c._NameSpace = NameSpaceNode.Name;
                                    }
                                    //类
                                    if (xmlHelper.IsAttrExist(node, "class"))
                                    {
                                        c._Class = node.Attributes["class"].Value.Trim();
                                    }
                                    else if (node.ParentNode != null)
                                    {
                                        XmlNode ClassNode = node.ParentNode;
                                        c._Class = ClassNode.Name;
                                    }
                                    //控件
                                    if (!string.IsNullOrEmpty(node.Name))
                                    {
                                        c._Name = node.Name.Trim();
                                    }
                                    //控件类型
                                    c._ControlType = ctrlType;
                                    //数据类型
                                    if (xmlHelper.IsAttrExist(node, "datatype"))
                                    {
                                        string typename = node.Attributes["datatype"].Value.Trim();

                                        CtrlAttr attr = GetAttr(_xmlpath, c._ControlType, typename);

                                        if (attr != null)
                                        {
                                            c._TypeName = typename;
                                            c._Attr = attr;
                                        }
                                        else
                                        {
                                            MessageBox.Show("没有找到指定类型名的数据类型!");
                                        }
                                    }
                                    //事件类型
                                    if (xmlHelper.IsAttrExist(node, "eventtype"))
                                    {
                                        c._EventType = node.Attributes["eventtype"].Value.Trim().ToUpper();
                                    }
                                    //if (!string.IsNullOrEmpty(node.Attributes["requiretype"].Value))
                                    //{
                                    //    c._RequireType = node.Attributes["requiretype"].Value.Trim();
                                    //}
                                    if (frmCtrl != null && frmCtrl.Name.Equals(c._Name))
                                    {
                                        c._FrmControl = frmCtrl;
                                    }

                                    ctrl = c;
                                }
                                break;
                            case "datagridview":
                                {
                                    ControlClass c = new ControlClass();

                                    //命名空间
                                    if (xmlHelper.IsAttrExist(node, "namespace"))
                                    {
                                        c._NameSpace = node.Attributes["namespace"].Value.Trim();
                                    }
                                    else if (node.ParentNode != null && node.ParentNode.ParentNode != null)
                                    {
                                        XmlNode NameSpaceNode = node.ParentNode.ParentNode;
                                        c._NameSpace = NameSpaceNode.Name;
                                    }
                                    //类
                                    if (xmlHelper.IsAttrExist(node, "class"))
                                    {
                                        c._Class = node.Attributes["class"].Value.Trim();
                                    }
                                    else if (node.ParentNode != null)
                                    {
                                        XmlNode ClassNode = node.ParentNode.ParentNode;
                                        c._Class = ClassNode.Name;
                                    }
                                    //控件
                                    if (!string.IsNullOrEmpty(node.Name))
                                    {
                                        c._Name = node.Name.Trim();
                                    }
                                    //控件类型
                                    c._ControlType = ctrlType;
                                    //数据类型
                                    if (xmlHelper.IsAttrExist(node, "datatype"))
                                    {
                                        string typename = node.Attributes["datatype"].Value.Trim();

                                        CtrlAttr attr = GetAttr(_xmlpath, c._ControlType, typename);

                                        if (attr != null)
                                        {
                                            c._TypeName = typename;
                                            c._Attr = attr;
                                        }
                                        else
                                        {
                                            MessageBox.Show("没有找到指定类型名的数据类型!");
                                        }
                                    }
                                    //获取DataGridView数据列可空限制
                                    if (!string.IsNullOrEmpty(node.Attributes["notnullindex"].Value.Trim()))
                                    {
                                        string tmp = node.Attributes["notnullindex"].Value.Trim();
                                        tmp.Replace(',', ',');

                                        string[] indexTemp = tmp.Split(',');

                                        foreach (string item in indexTemp)
                                        {
                                            int idx;
                                            if (Int32.TryParse(item.Trim(), out idx))
                                            {
                                                c._NotNullIndex.Add(idx);
                                            }
                                            else
                                            {
                                                MessageBox.Show("DataGridView:" + c._Name + "非空列索引有误!");
                                            }
                                        }

                                        //string typename = node.Attributes["nulltype"].Value.Trim();

                                        //CtrlAttr atemp = GetAttr(_xmlpath, c._ControlType, typename);

                                        //if (atemp != null && atemp is AttrDataGridView)
                                        //{
                                        //    AttrDataGridView gTemp = atemp as AttrDataGridView;

                                        //    foreach (AttrInfo item in gTemp.Attr)
                                        //    {
                                        //        c._NullType.Add(item);
                                        //    }
                                        //}

                                    }

                                    if (frmCtrl != null && frmCtrl.Name.Equals(c._Name))
                                    {
                                        c._FrmControl = frmCtrl;
                                    }

                                    ctrl = c;
                                }
                                break;
                            case "button":
                                {
                                    ButtonClass btn = new ButtonClass();

                                    //命名空间
                                    if (xmlHelper.IsAttrExist(node, "namespace"))
                                    {
                                        btn._NameSpace = node.Attributes["namespace"].Value.Trim();
                                    }
                                    else if (node.ParentNode != null && node.ParentNode.ParentNode != null)
                                    {
                                        XmlNode NameSpaceNode = node.ParentNode.ParentNode;
                                        btn._NameSpace = NameSpaceNode.Name;
                                    }
                                    //类
                                    if (xmlHelper.IsAttrExist(node, "class"))
                                    {
                                        btn._Class = node.Attributes["class"].Value.Trim();
                                    }
                                    else if (node.ParentNode != null)
                                    {
                                        XmlNode ClassNode = node.ParentNode;
                                        btn._Class = ClassNode.Name;
                                    }
                                    //控件
                                    if (!string.IsNullOrEmpty(node.Name))
                                    {
                                        btn._Name = node.Name.Trim();
                                    }
                                    //控件类型
                                    btn._ControlType = ctrlType;
                                    //验证控件
                                    if (xmlHelper.IsAttrExist(node, "controls"))
                                    {
                                        //edit by dwq 2015-06-12 按钮数据实体需要关联当前窗体控件
                                        btn._CtrlStr = node.Attributes["controls"].Value.Trim();

                                        //窗体中所有控件
                                        Form FormOwner = UtilClass.SearchOwner(frmCtrl) as Form;
                                        List<Control> FormControls = UtilClass.InitControls(FormOwner);

                                        string[] ctrlTmps = node.Attributes["controls"].Value.Trim().Split(',');

                                        foreach (string item in ctrlTmps)
                                        {
                                            Control FormControl = FormControls.Where(n => n.Name.Equals(item)).FirstOrDefault();

                                            if (FormControl != null && FormControl.Name.Equals(item))
                                            {
                                                if (FormControl.GetType().Name.Equals("TextBox"))
                                                {
                                                    ControlClass SubCtrl = new ControlClass();
                                                    SubCtrl._NameSpace = btn._NameSpace;
                                                    SubCtrl._Class = btn._Class;
                                                    SubCtrl._Name = item;
                                                    SubCtrl._ControlType = FormControl.GetType().Name;
                                                    SubCtrl._FrmControl = FormControl;

                                                    btn._Controls.Add(SubCtrl);
                                                }
                                                else if (FormControl.GetType().Name.Equals("DataGridView"))
                                                {
                                                    ControlClass SubCtrl = GetControl(_xmlpath, btn._NameSpace, btn._Class, FormControl) as ControlClass;

                                                    btn._Controls.Add(SubCtrl);
                                                }
                                            }
                                        }
                                    }
                                    //提示信息
                                    if (xmlHelper.IsAttrExist(node, "tip"))
                                    {
                                        string tipname = node.Attributes["tip"].Value.ToString().Trim();

                                        btn._TipName = tipname;
                                        btn._Tips = GetTip(_xmlpath, tipname);
                                    }

                                    if (frmCtrl != null && frmCtrl.Name.Equals(btn._Name))
                                    {
                                        btn._FrmControl = frmCtrl;
                                    }

                                    ctrl = btn;
                                }
                                break;
                            default:
                                ctrl = null;
                                break;
                        }
                    }
                    else
                    {
                        ctrl = null;
                    }
                    #endregion
                }
            }
            else
            {
                //node==null

                ctrl = null;
            }

            return ctrl;
        }