mina68
یک شنبه 31 اردیبهشت 1391, 07:53 صبح
سلام
هنگام گشت و گذار تو اینترنت مثالی دیدم از یه Textbox که فقط عدد قبول می کنه
آموزش ساختن این Textbox که نویسنده اش اون رو Digitbox اسم گذاری کرده رو می توننین در آدرس
http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a-textbox-in-csharp/
ببینید
نظر مثال خیلی کاملی میاد
کد هاش به صورت زیر هست
using System;
using System.Windows.Controls;
using System.Windows.Input;
namespace System.Windows.Controls
{
public class DigitBox : TextBox
{
#region Constructors
/// <summary>
/// The default constructor
/// </summary>
public DigitBox()
{
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 IsActionKey(Key inKey)
{
return inKey == Key.Delete || inKey == Key.Back || inKey == Key.Tab || inKey == Key.Return || Keyboard.Modifiers.HasFlag(ModifierKeys.Alt);
}
private string LeaveOnlyNumbers(String inString)
{
String tmp = inString;
foreach (char c in inString.ToCharArray())
{
if (!IsDigit(c))
{
tmp = tmp.Replace(c.ToString(), "");
}
}
return tmp;
}
public bool IsDigit(char c)
{
return (c >= '0' || c <= '9');
}
#endregion
#region Event Functions
protected void OnKeyDown(object sender, KeyEventArgs e)
{
e.Handled = !IsNumberKey(e.Key) && !IsActionKey(e.Key);
}
protected void OnTextChanged(object sender, TextChangedEventArgs e)
{
base.Text = LeaveOnlyNumbers(Text);
}
#endregion
}
}
و کد Xaml اون
<Window x:Class="TextBoxIntsOnly.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TextBoxIntsOnly"
Title="Window1" Height="300" Width="300">
<Grid>
<local:DigitBox Margin="87,27,71,0" VerticalAlignment="Top" x:Name="textBox1" />
<Label Height="28" HorizontalAlignment="Left" Margin="9,25,0,0" Name="label1" VerticalAlignment="Top" Width="72">Integers:</Label>
<TextBox Height="23" Margin="87,56,71,0" Name="textBox2" VerticalAlignment="Top" />
<Label Height="28" HorizontalAlignment="Left" Margin="9,54,0,0" Name="label2" VerticalAlignment="Top" Width="72">Alphabet:</Label>
</Grid>
</Window>
ولی من به علت تازه کار بودن توی wpf نمی دونم چه طور باید از کلاس DigitBox توی برنامه ام استفاده کنم چون هنگام استفاده تو قسمت clr-namespace: خطا می ده
حالا من از دوستانی که تجربه بیشتری توی wpf دارن می خوام یه برنامه ساده با استفادهClass Digitbox
بالا بسازن تا هم من از اون استفاده کنم هم دیگر دوستان
هنگام گشت و گذار تو اینترنت مثالی دیدم از یه Textbox که فقط عدد قبول می کنه
آموزش ساختن این Textbox که نویسنده اش اون رو Digitbox اسم گذاری کرده رو می توننین در آدرس
http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a-textbox-in-csharp/
ببینید
نظر مثال خیلی کاملی میاد
کد هاش به صورت زیر هست
using System;
using System.Windows.Controls;
using System.Windows.Input;
namespace System.Windows.Controls
{
public class DigitBox : TextBox
{
#region Constructors
/// <summary>
/// The default constructor
/// </summary>
public DigitBox()
{
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 IsActionKey(Key inKey)
{
return inKey == Key.Delete || inKey == Key.Back || inKey == Key.Tab || inKey == Key.Return || Keyboard.Modifiers.HasFlag(ModifierKeys.Alt);
}
private string LeaveOnlyNumbers(String inString)
{
String tmp = inString;
foreach (char c in inString.ToCharArray())
{
if (!IsDigit(c))
{
tmp = tmp.Replace(c.ToString(), "");
}
}
return tmp;
}
public bool IsDigit(char c)
{
return (c >= '0' || c <= '9');
}
#endregion
#region Event Functions
protected void OnKeyDown(object sender, KeyEventArgs e)
{
e.Handled = !IsNumberKey(e.Key) && !IsActionKey(e.Key);
}
protected void OnTextChanged(object sender, TextChangedEventArgs e)
{
base.Text = LeaveOnlyNumbers(Text);
}
#endregion
}
}
و کد Xaml اون
<Window x:Class="TextBoxIntsOnly.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TextBoxIntsOnly"
Title="Window1" Height="300" Width="300">
<Grid>
<local:DigitBox Margin="87,27,71,0" VerticalAlignment="Top" x:Name="textBox1" />
<Label Height="28" HorizontalAlignment="Left" Margin="9,25,0,0" Name="label1" VerticalAlignment="Top" Width="72">Integers:</Label>
<TextBox Height="23" Margin="87,56,71,0" Name="textBox2" VerticalAlignment="Top" />
<Label Height="28" HorizontalAlignment="Left" Margin="9,54,0,0" Name="label2" VerticalAlignment="Top" Width="72">Alphabet:</Label>
</Grid>
</Window>
ولی من به علت تازه کار بودن توی wpf نمی دونم چه طور باید از کلاس DigitBox توی برنامه ام استفاده کنم چون هنگام استفاده تو قسمت clr-namespace: خطا می ده
حالا من از دوستانی که تجربه بیشتری توی wpf دارن می خوام یه برنامه ساده با استفادهClass Digitbox
بالا بسازن تا هم من از اون استفاده کنم هم دیگر دوستان