241 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#if FRAMEWORK20
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Drawing;
 | 
						|
using DevComponents.DotNetBar;
 | 
						|
using System.ComponentModel;
 | 
						|
 | 
						|
namespace DevComponents.Editors
 | 
						|
{
 | 
						|
    public class VisualNumericInput : VisualInputBase
 | 
						|
    {
 | 
						|
        #region Private Variables
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Events
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when Value property has changed.
 | 
						|
        /// </summary>
 | 
						|
        public event EventHandler ValueChanged;
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Constructor
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Internal Implementation
 | 
						|
        protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
 | 
						|
        {
 | 
						|
            if ((e.KeyCode == System.Windows.Forms.Keys.Subtract || e.KeyCode == System.Windows.Forms.Keys.OemMinus) && AllowsNegativeValue && this.InputStack.Length>0)
 | 
						|
            {
 | 
						|
                if (!this.IsEmpty)
 | 
						|
                    NegateValue();
 | 
						|
                e.Handled = true;
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnKeyDown(e);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool OnCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
 | 
						|
        {
 | 
						|
            if (!this.IsReadOnly)
 | 
						|
            {
 | 
						|
                if (keyData == System.Windows.Forms.Keys.Up)
 | 
						|
                {
 | 
						|
                    IncreaseValue();
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
                else if (keyData == System.Windows.Forms.Keys.Down)
 | 
						|
                {
 | 
						|
                    DecreaseValue();
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return base.OnCmdKey(ref msg, keyData);
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _MouseWheelValueChangeEnabled = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether mouse wheel increases or decreases the input value when used.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Category("Behavior"), Description("Indicates whether mouse wheel increases or decreases the input value when used.")]
 | 
						|
        public bool MouseWheelValueChangeEnabled
 | 
						|
        {
 | 
						|
            get { return _MouseWheelValueChangeEnabled; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                _MouseWheelValueChangeEnabled = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        
 | 
						|
 | 
						|
        protected override void OnMouseWheel(System.Windows.Forms.MouseEventArgs e)
 | 
						|
        {
 | 
						|
            if (_MouseWheelValueChangeEnabled && !this.IsReadOnly)
 | 
						|
            {
 | 
						|
                if (e.Delta > 0)
 | 
						|
                {
 | 
						|
                    IncreaseValue();
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    DecreaseValue();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnMouseWheel(e);
 | 
						|
        }
 | 
						|
 | 
						|
        public virtual void DecreaseValue()
 | 
						|
        {
 | 
						|
            InputComplete(false);
 | 
						|
            ResetInputPosition();
 | 
						|
        }
 | 
						|
 | 
						|
        public virtual void IncreaseValue()
 | 
						|
        {
 | 
						|
            InputComplete(false);
 | 
						|
            ResetInputPosition();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void NegateValue()
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool AcceptKeyPress(System.Windows.Forms.KeyPressEventArgs e)
 | 
						|
        {
 | 
						|
            if (e.KeyChar >= 48 && e.KeyChar <= 57 || 
 | 
						|
                this.AllowsNegativeValue && e.KeyChar == '-' && (this.IsEmpty || !this.IsEmpty && (this.InputStack=="" || this.InputStack=="0")))
 | 
						|
            {
 | 
						|
                e.Handled = true;
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        public override void PerformLayout(PaintInfo p)
 | 
						|
        {
 | 
						|
            Size size = Size.Empty;
 | 
						|
            Graphics g = p.Graphics;
 | 
						|
            Font font = p.DefaultFont;
 | 
						|
            eTextFormat textFormat = eTextFormat.Default | eTextFormat.NoPadding;
 | 
						|
 | 
						|
            string s = GetMeasureString();
 | 
						|
 | 
						|
            size = TextDrawing.MeasureString(g, s, font, 0, textFormat);
 | 
						|
            //size.Width++;
 | 
						|
            this.Size = size;
 | 
						|
 | 
						|
            base.PerformLayout(p);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual string GetMeasureString()
 | 
						|
        {
 | 
						|
            return "";
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnPaint(PaintInfo p)
 | 
						|
        {
 | 
						|
            Graphics g = p.Graphics;
 | 
						|
            Font font = p.DefaultFont;
 | 
						|
            Color color = p.ForeColor;
 | 
						|
            if (!this.GetIsEnabled(p))
 | 
						|
                color = p.DisabledForeColor;
 | 
						|
            eTextFormat textFormat = eTextFormat.Default | eTextFormat.NoPadding;
 | 
						|
            if (this.IsFocused)
 | 
						|
            {
 | 
						|
                if (p.Colors.Highlight.IsEmpty)
 | 
						|
                    g.FillRectangle(SystemBrushes.Highlight, this.RenderBounds);
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    using (SolidBrush brush = new SolidBrush(p.Colors.Highlight))
 | 
						|
                        g.FillRectangle(brush, this.RenderBounds);
 | 
						|
                }
 | 
						|
                color = p.Colors.HighlightText.IsEmpty ? SystemColors.HighlightText : p.Colors.HighlightText;
 | 
						|
            }
 | 
						|
 | 
						|
            if (!(this.IsEmpty && this.AllowEmptyState))
 | 
						|
            {
 | 
						|
         
 | 
						|
                string text = GetRenderString();
 | 
						|
                TextDrawing.DrawString(g, text, font, color, RenderBounds, textFormat);
 | 
						|
            }
 | 
						|
 | 
						|
            base.OnPaint(p);
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual string GetRenderString()
 | 
						|
        {
 | 
						|
            return "";
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _AllowEmptyState = true;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether control allows empty input state i.e. does not have an number entered. Default value is true. When control is empty
 | 
						|
        /// IsEmpty property returns true and control does not display number. Set to false to always force control to have number displayed.
 | 
						|
        /// </summary>
 | 
						|
        public bool AllowEmptyState
 | 
						|
        {
 | 
						|
            get { return _AllowEmptyState; }
 | 
						|
            set { _AllowEmptyState = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool _AllowsNegativeValue = true;
 | 
						|
        public bool AllowsNegativeValue
 | 
						|
        {
 | 
						|
            get { return _AllowsNegativeValue; }
 | 
						|
            set { _AllowsNegativeValue = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override bool SetInputStack(string s)
 | 
						|
        {
 | 
						|
            s = ProcessNewInputStack(s);
 | 
						|
            return base.SetInputStack(s);
 | 
						|
        }
 | 
						|
        private bool _LeadingZero = false;
 | 
						|
        protected virtual string ProcessNewInputStack(string s)
 | 
						|
        {
 | 
						|
            if (this.InputStack == "0" && s != "0" && s.StartsWith("0"))
 | 
						|
            {
 | 
						|
                s = s.Substring(1);
 | 
						|
                this.SetInputPosition(this.InputPosition - 1);
 | 
						|
                _LeadingZero = true;
 | 
						|
            }
 | 
						|
            else
 | 
						|
                _LeadingZero = false;
 | 
						|
            return s;
 | 
						|
        }
 | 
						|
        protected virtual bool IsLeadingZero
 | 
						|
        { 
 | 
						|
            get
 | 
						|
            {
 | 
						|
                return _LeadingZero;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected override void ResetInputStack()
 | 
						|
        {
 | 
						|
            _LeadingZero = false;
 | 
						|
            base.ResetInputStack();
 | 
						|
        }
 | 
						|
 | 
						|
        protected virtual void OnValueChanged()
 | 
						|
        {
 | 
						|
            if (ValueChanged != null)
 | 
						|
                ValueChanged(this, new EventArgs());
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnInputLostFocus()
 | 
						|
        {
 | 
						|
            if (this.InputStack == "-")
 | 
						|
                OnClear();
 | 
						|
            else
 | 
						|
                ResetInputStack();
 | 
						|
            base.OnInputLostFocus();
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
    }
 | 
						|
}
 | 
						|
#endif
 | 
						|
 |