امروز موقع کار نیاز به یک TextBox داشتم که قابلیت Digit Grouping یا جداسازی اعداد رو پشتیبانی کنه، یعنی اعداد به صورت یکان، دهگان و ... جدا بشن. با جستجو چیزی که به کارم بیاد پیدا نکردم و خودم دست به کار شدم.
مجموعه دوره آموزش برنامه نویسی - مقدماتی تا پیشرفته
برای یادگیری و آموزش سی شارپ ( آموزش زبان برنامه نویسی سی شارپ ) رایگان به این لینک بروید
با فرض اینکه یک TextBox با نام TextBox1 بر روی فرم ما قرار داره، کد زیر رو برای رویدادهای TextChanged و KeyPress اضافه کنید. کد زیر داخل Constructor فرم نوشته شده:
public Form1()
{
InitializeComponent();
var callTextChange = true;
textBox1.TextChanged += (sender, args) =>
{
if (!callTextChange)
return;
var textBox = (TextBox)sender;
var selectionIsLast = textBox.SelectionStart == textBox1.TextLength;
var lastSelectionStart = textBox.Text.Length - textBox1.SelectionStart;
var numberText = textBox.Text.Replace(",", "");
var newText = string.Empty;
var separatorFlag = 0;
for (var counter = numberText.Length - 1; counter >= 0; counter--)
{
newText = newText + numberText[counter];
separatorFlag++;
if (separatorFlag == 3 && counter == 0)
break;
if (separatorFlag != 3)
continue;
newText = newText + ',';
separatorFlag = 0;
}
callTextChange = false;
textBox.Text = string.Join("", newText.Reverse());
callTextChange = true;
if (selectionIsLast)
textBox.SelectionStart = textBox.TextLength;
else
textBox.SelectionStart = textBox.TextLength < lastSelectionStart ? 0 : textBox.TextLength - lastSelectionStart;
};
textBox1.KeyPress += (sender, args) =>
{
if (char.IsDigit(args.KeyChar) || args.KeyChar == '\b')
return;
args.Handled = true;
};
}
نمونه اجرای برنامه: