protected bool ChangeValue(int value, ValueChangeReason reason)
        {
            // 对设置值进行有效性检查
            if (value > this.MaxValue)
            {
                value = this.MaxValue;
            }
            if (value < this.MinValue)
            {
                value = this.MinValue;
            }

            // 数值没有变化?
            int oldValue = this.Value;

            if (value == oldValue)
            {
                // 只需要更新数据显示就可以了
                if (reason != ValueChangeReason.Keyboard)
                {
                    SetShownText(ValueToString(value));
                }
                return(true);
            }

            // 发出通知,查看是否可以修改?
            if (OnValueChanging != null)
            {
                ValueChangingArgs e = new ValueChangingArgs(reason, oldValue, value);
                OnValueChanging.Invoke(this, e);
                if (e.rejectChange)
                {
                    return(false);
                }

                // 可以通过 Changing 事件设置值
                value = e.newValue;
            }

            // 真正修改数据
            if (reason == ValueChangeReason.Keyboard && (!internalChange) &&
                StringToValue(this.txtNumeric.Text, out oldValue) && oldValue == value)
            {
                internalChange = true;
                this.Value     = value;
                internalChange = false;
            }
            else
            {
                this.Value = value;
            }

            return(true);
        }
Exemple #2
0
        /// <summary>
        /// 响应tsComboMonth的ValueChanging事件
        /// </summary>
        private void tsComboMonth_ValueChanging(object sender, ValueChangingArgs e)
        {
            /* 若保存按钮可用,检查是否有未保存的数据 */
            if (tsButtonSave.Enabled && !SaveData(new List <Act> {
                Act.AskIsUpdate, Act.SaveData
            }))
            {
                tsComboMonth.Value = e.OldValue;
                return;
            }

            /* 控制权限 */
            SetControlRight();
        }