示例#1
0
        void CheckAndUpdateValue(Word.Signs newSign, long newMagnitude, bool suppressEvent)
        {
            mEditMode = false;
            var newValue = newSign.ApplyTo(newMagnitude);

            if (newValue < MinValue)
            {
                newValue     = MinValue;
                newMagnitude = MinValue;
                if (newMagnitude < 0)
                {
                    newSign      = Word.Signs.Negative;
                    newMagnitude = -newMagnitude;
                }
            }

            if (!SupportSign && (newValue < 0L))
            {
                newValue = -newValue;
                newSign  = Word.Signs.Positive;
            }

            if (newValue > MaxValue)
            {
                newValue     = MaxValue;
                newMagnitude = MaxValue;
                if (newMagnitude < 0)
                {
                    newSign      = Word.Signs.Negative;
                    newMagnitude = -newMagnitude;
                }
            }

            mUpdating = true;
            SuspendLayout();

            ForeColor      = mRenderedTextColor;
            mLastValidText = newMagnitude.ToString();
            if (newSign == Word.Signs.Negative && (mSupportNegativeZero || newMagnitude != 0))
            {
                mLastValidText = '-' + mLastValidText;
            }

            base.Text     = mLastValidText;
            mLastCaretPos = SelectionStart + SelectionLength;
            Select(TextLength, 0);

            ResumeLayout();
            mUpdating = false;

            if (newMagnitude != mMagnitude || newSign != mSign)
            {
                long magnitude = mMagnitude;
                mMagnitude = newMagnitude;
                Word.Signs sign = mSign;
                mSign = newSign;

                if (!suppressEvent)
                {
                    OnValueChanged(new ValueChangedEventArgs(sign, magnitude, newSign, newMagnitude));
                }
            }
        }
示例#2
0
 public override long GetValue(int currentAddress) => mSign.ApplyTo(mMagnitude);
示例#3
0
 public static long Apply(this long magnitude, Word.Signs sign) => sign.ApplyTo(magnitude);