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)); } } }
public override long GetValue(int currentAddress) => mSign.ApplyTo(mMagnitude);
public static long Apply(this long magnitude, Word.Signs sign) => sign.ApplyTo(magnitude);