You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.4 KiB
122 lines
3.4 KiB
using System;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls.Primitives;
|
|
using System.Windows.Input;
|
|
|
|
namespace Gumming
|
|
{
|
|
public class IntBox : TextBox
|
|
{
|
|
#region MaxValue
|
|
|
|
public static readonly DependencyProperty MaxValueProperty =
|
|
DependencyProperty.Register("MaxValue", typeof(Decimal), typeof(IntBox),
|
|
new PropertyMetadata(100000000m, OnMaxValueChanged,
|
|
CoerceMaxValue));
|
|
|
|
public Decimal MaxValue
|
|
{
|
|
get { return (Decimal)GetValue(MaxValueProperty); }
|
|
set { SetValue(MaxValueProperty, value); }
|
|
}
|
|
|
|
private static void OnMaxValueChanged(DependencyObject element,
|
|
DependencyPropertyChangedEventArgs e)
|
|
{
|
|
var control = (IntBox)element;
|
|
var maxValue = (Decimal)e.NewValue;
|
|
}
|
|
|
|
private static object CoerceMaxValue(DependencyObject element, Object baseValue)
|
|
{
|
|
var maxValue = (Decimal)baseValue;
|
|
|
|
if (maxValue == Decimal.MaxValue)
|
|
{
|
|
return DependencyProperty.UnsetValue;
|
|
}
|
|
|
|
return maxValue;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
/*
|
|
* The default constructor
|
|
*/
|
|
public IntBox()
|
|
{
|
|
TextChanged += new TextChangedEventHandler(OnTextChanged);
|
|
KeyDown += new KeyEventHandler(OnKeyDown);
|
|
}
|
|
#endregion
|
|
|
|
#region Properties
|
|
new public String Text
|
|
{
|
|
get { return base.Text; }
|
|
set
|
|
{
|
|
base.Text = LeaveOnlyNumbers(value);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Functions
|
|
private bool IsNumberKey(Key inKey)
|
|
{
|
|
if (inKey < Key.D0 || inKey > Key.D9)
|
|
{
|
|
if (inKey < Key.NumPad0 || inKey > Key.NumPad9)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private bool IsDelOrBackspaceOrTabKey(Key inKey)
|
|
{
|
|
return inKey == Key.Delete || inKey == Key.Back || inKey == Key.Tab;
|
|
}
|
|
|
|
private string LeaveOnlyNumbers(String inString)
|
|
{
|
|
String tmp = inString;
|
|
foreach (char c in inString.ToCharArray())
|
|
{
|
|
if (!System.Text.RegularExpressions.Regex.IsMatch(c.ToString(), "^[0-9]*$"))
|
|
{
|
|
tmp = tmp.Replace(c.ToString(), "");
|
|
}
|
|
}
|
|
int value = 0;
|
|
int.TryParse(inString, out value);
|
|
if (value > MaxValue)
|
|
{
|
|
base.Text = MaxValue.ToString();
|
|
return base.Text;
|
|
}
|
|
return tmp;
|
|
}
|
|
#endregion
|
|
|
|
#region Event Functions
|
|
protected void OnKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
e.Handled = !IsNumberKey(e.Key) && !IsDelOrBackspaceOrTabKey(e.Key);
|
|
}
|
|
|
|
protected void OnTextChanged(object sender, TextChangedEventArgs e)
|
|
{
|
|
base.Text = LeaveOnlyNumbers(Text);
|
|
this.Select(this.Text.Length, 0);
|
|
}
|
|
#endregion
|
|
}
|
|
} |