Exemple #1
0
        private void define_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex < 0)
            {
                return;
            }

            if (e.RowIndex < 0)
            {
                return;
            }

            if (false == define.IsCurrentCellInEditMode)
            {
                return;
            }

            DataGridViewCellCollection cells = define.Rows[e.RowIndex].Cells;

            if (cells["BeanLocked"].Tag != null)
            {
                // assert(cells["VarName"] == cells[e.ColumnIndex]);
                var newValue = e.FormattedValue as string;
                if (null != Tools.VerifyName(newValue, CheckNameType.ShowMsg))
                {
                    e.Cancel = true;
                    return; // VerifyName 里面已经显示消息了。
                }
                return;
            }

            DataGridViewCell cellVarName = cells["VarName"];

            if (null == cellVarName.Tag)
            {
                e.Cancel = true;
                MessageBox.Show("只有VarName.Tag设置的行才允许编辑,其他的应该都设置了 ReadOnly. 怎么到这里的?");
                return;
            }

            if (cellVarName.Tag is EnumDefine.ValueDefine valueDefine)
            {
                string colName = define.Columns[e.ColumnIndex].Name;
                switch (colName)
                {
                case "VarName":
                    var newValue = e.FormattedValue as string;
                    if (null != Tools.VerifyName(newValue, CheckNameType.ShowMsg))
                    {
                        e.Cancel = true;
                        return;
                    }
                    if (false == valueDefine.Name.Equals(newValue) &&
                        null != valueDefine.Parent.GetValueDefine(newValue))
                    {
                        e.Cancel = true;
                        MessageBox.Show("enum.value 重名了。");
                        return;
                    }
                    break;

                case "VarValue":
                    if (false == int.TryParse(e.FormattedValue as string, out var _))
                    {
                        e.Cancel = true;
                        MessageBox.Show("enum.value只能是整数。");
                        return;
                    }
                    break;
                }
                return;
            }

            // modify Var
            VarDefine var = cellVarName.Tag as VarDefine;

            if (null == var.Name) // var.Name is null when row is ',' for addvar
            {
                e.Cancel = true;  // 肯定时readonly吧。怎么到这里的。
                return;
            }

            try
            {
                string colName = define.Columns[e.ColumnIndex].Name;
                switch (colName)
                {
                case "VarName":
                    string newVarName = e.FormattedValue as string;
                    if (var.Name.Equals(newVarName))
                    {
                        return;
                    }

                    if (null != Tools.VerifyName(newVarName, CheckNameType.ShowMsg))
                    {
                        e.Cancel = true;
                        return;     // VerifyName 里面已经显示消息了。
                    }
                    if (var.Parent.GetVariable(newVarName) != null)
                    {
                        e.Cancel = true;
                        MessageBox.Show("变量名字重复了。");
                        return;
                    }
                    break;

                case "VarValue":
                    string newValue = e.FormattedValue as string;
                    if (false == string.IsNullOrEmpty(newValue))
                    {
                        var r = FormMain.Instance.Documents.SearchReference(newValue);
                        e.Cancel = r == null;
                        if (e.Cancel)
                        {
                            MessageBox.Show("引用的Bean名字没有找到。输入空将创建一个。");
                        }
                    }
                    break;

                case "VarForeign":
                    string errForeign = var.OpenForeign(e.FormattedValue as string, out var _);
                    if (null != errForeign)
                    {
                        e.Cancel = true;
                        MessageBox.Show(errForeign);
                    }
                    break;

                case "VarType":
                    VarDefine.EType newType = (VarDefine.EType)System.Enum.Parse(
                        typeof(VarDefine.EType), e.FormattedValue as string);
                    string errType = var.CanChangeTo(newType);
                    if (null != errType)
                    {
                        e.Cancel = true;
                        MessageBox.Show(errType);
                    }
                    break;

                case "VarDefault":
                    if (false == var.CheckType(var.Type, e.FormattedValue as string))
                    {
                        e.Cancel = true;
                        MessageBox.Show("这个默认值和当前类型不匹配。");
                    }
                    break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                e.Cancel = true;
            }
        }
Exemple #2
0
        /// <summary>
        /// AddVariable
        /// </summary>
        /// <param name="name"></param>
        /// <param name="type"></param>
        /// <param name="reference"></param>
        /// <returns>error string.</returns>
        public (VarDefine, bool, string) AddVariable(string name,
                                                     VarDefine.EType type = VarDefine.EType.Undecided, string reference = null)
        {
            if (GetVariable(name) != null)
            {
                return(null, false, "duplicate variable name");
            }

            VarDefine var = new VarDefine(this, name)
            {
                Type  = type,
                Value = reference,
                GridColumnValueWidth = 50,
            };

            bool create = false;

            switch (type)
            {
            case VarDefine.EType.List:
                if (string.IsNullOrEmpty(reference))
                {
                    var.Value = var.FullName();
                    if (_BeanDefines.TryGetValue(var.Name, out var exist))
                    {
                        if (false == exist.NamespaceOnly)
                        {
                            return(null, false, $"尝试为变量'{var.Name}'创建一个 BeanDefine 失败:已经存在。");
                        }
                    }
                    else
                    {
                        exist = new BeanDefine(Document, var.Name, this);
                        _BeanDefines.Add(var.Name, exist);
                    }
                    var.Reference = exist;
                    exist.AddReferenceFrom(var, ReferenceFrom.Reasons.List);
                    create = true;
                }
                else
                {
                    var r = FormMain.Instance.Documents.SearchReference(var.Value);
                    if (null == r)
                    {
                        return(null, false, "list reference bean not found.");
                    }
                    var.Reference = r;
                    r.AddReferenceFrom(var, ReferenceFrom.Reasons.List);
                }
                break;

            case VarDefine.EType.Enum:
                _EnumDefines.Add(var.Name, new EnumDefine(this, var.Name));
                break;
            }

            _Variables.Add(var);
            var.CreateXmlElementIfNeed(); // 调整变量顺序的时候需要这个创建好。
            Document.IsChanged = true;
            return(var, create, "");
        }
Exemple #3
0
        public (VarDefine, bool) AddVariable(VarDefine hint)
        {
            if (hint.Parent.Locked)
            {
                MessageBox.Show("bean is Locked");
                return(null, false);
            }

            FormInputVarDefine input = new FormInputVarDefine();

            input.StartPosition = FormStartPosition.CenterParent;

            // 初始化 input.ComboBoxBeanDefines。
            // 如果要全部定义,调用 LoadAllDocument.
            List <string> beanDefineFullNames = new List <string>();

            Documents.ForEachFile((Documents.File file) =>
            {
                file.Document?.BeanDefine.CollectFullNameIncludeSubBeanDefine(beanDefineFullNames);
                return(true);
            });
            beanDefineFullNames.Sort();
            input.ComboBoxBeanDefines.Items.AddRange(beanDefineFullNames.ToArray());

            string    varName      = "";
            VarDefine result       = null;
            bool      createResult = false;

            while (true)
            {
                input.TextBoxVarName.Text = varName;
                if (DialogResult.OK != input.ShowDialog(this))
                {
                    break;
                }

                try
                {
                    varName = input.TextBoxVarName.Text;
                    if (null != Tools.VerifyName(varName, CheckNameType.ShowMsg))
                    {
                        continue;
                    }
                    VarDefine.EType varType = VarDefine.ToEType(input.ComboBoxVarType.Text);
                    (VarDefine var, bool create, string err) =
                        hint.Parent.AddVariable(varName, varType, input.ComboBoxBeanDefines.Text);

                    if (null == var)
                    {
                        MessageBox.Show(err);
                        continue;
                    }
                    result       = var;
                    createResult = create;
                    this.UpdateWhenAddVariable(var);
                    break;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            input.Dispose();
            return(result, createResult);
        }