PDA

View Full Version : کنترل مقادیر ورودی به تکست باکس



samaram
سه شنبه 05 مرداد 1389, 15:00 عصر
برای این سوالم چند دقیقه است دارم تو فروم سرچ میکنم. ولی یا کد سی شارپ رو گیر نیاوردم و یا به هر نحو با کد ارائه شده مشکل داشتم. میشه سوالات زیر رو برام جواب بدید؟
1- چطور میتونم مقدار ریالی در تکست باکسم بپذیرم؟ یعنی همزمان با وارد شدن مقدار ، سه تا سه تا از هم جداش کنه ولی بعد که تو بانک ریخته میشه این جداکننده ها رو تو بانک نریزه. چون مقدار فیلد بانکم عددیه
2- چطور میتونم تعریف کنم تکس باکسم فقط عدد بگیره؟
3- چطور تعریف کنم تکست باک فقط حروف بگیره؟

صباح فتحی
سه شنبه 05 مرداد 1389, 15:12 عصر
خب اگه میخای 3 تا 3 تا جداشون کنی یه حلقه بزار:


for (int i = 0; i <=(textBox1.Text.Length)-3; i=i+3)
{
listBox1.Items.Add(textBox1.Text.Substring(i,3));
}

Editali
سه شنبه 05 مرداد 1389, 16:28 عصر
از یه MaskTextBox استفاده کن

برای خاصیت Maskش هم میتونی از رشته هایی مثل این استفاده کنی:

###,###,###
یا
000,000,000

samaram
چهارشنبه 06 مرداد 1389, 11:09 صبح
از یه MaskTextBox استفاده کن

برای خاصیت Maskش هم میتونی از رشته هایی مثل این استفاده کنی:

###,###,###
یا
000,000,000
ممنون. اخه نیمخوام از ماسک تکست باکس استفاده کنم. میخوام همون تکست باکس ساده باشه و وقتی کاربر اضافه میکنه خود به خود سه تا سه تا رو جدا کنه

samaram
چهارشنبه 06 مرداد 1389, 11:10 صبح
خب اگه میخای 3 تا 3 تا جداشون کنی یه حلقه بزار:


for (int i = 0; i <=(textBox1.Text.Length)-3; i=i+3)
{
listBox1.Items.Add(textBox1.Text.Substring(i,3));
}

چرا از لیست باکس استفاه کردین؟ ببینین من میخوام همون لحظه که در حال تایپ هستم هر سه تایی که کاربر اضافه میکنه یه ، بهش اضافه کنه ولی بعد که میریزه تو بانک این علامت لحاظ نشه. چون فیلد بانکم از نوع int هستش

samaram
چهارشنبه 06 مرداد 1389, 11:12 صبح
خب اگه میخای 3 تا 3 تا جداشون کنی یه حلقه بزار:


for (int i = 0; i <=(textBox1.Text.Length)-3; i=i+3)
{
listBox1.Items.Add(textBox1.Text.Substring(i,3));
}

چرا از لیست باکس استفاه کردین؟ ببینین من میخوام همون لحظه که در حال تایپ هستم هر سه تایی که کاربر اضافه میکنه یه ، بهش اضافه کنه ولی بعد که میریزه تو بانک این علامت لحاظ نشه. چون فیلد بانکم از نوع int هستش

mmd2009
چهارشنبه 06 مرداد 1389, 11:59 صبح
با سلام

یه همچین کدی بنویس امتحانش نکردم تا حالا ولی گفتم شاید به دردت بخوره



int a = textBox1.Text.Length;

if (a == 3 || a == 7 || a == 11)
{
SendKeys.Send("{/}");
}


البته تو رویداد TextChanged باید بنویسیش

samaram
چهارشنبه 06 مرداد 1389, 12:29 عصر
با سلام

یه همچین کدی بنویس امتحانش نکردم تا حالا ولی گفتم شاید به دردت بخوره



int a = textBox1.Text.Length;

if (a == 3 || a == 7 || a == 11)
{
SendKeys.Send("{/}");
}


البته تو رویداد TextChanged باید بنویسیش
کد درسته ولی یه مشکل داره : از چپ ، سه تا سه تا جدامیکنه.باید از راست جدا شه

صباح فتحی
چهارشنبه 06 مرداد 1389, 12:31 عصر
چرا از لیست باکس استفاه کردین؟ ببینین من میخوام همون لحظه که در حال تایپ هستم هر سه تایی که کاربر اضافه میکنه یه ، بهش اضافه کنه ولی بعد که میریزه تو بانک این علامت لحاظ نشه. چون فیلد بانکم از نوع int هستش
عزیزم من همینجوری گذاشتم تا نتیجه معلوم باشه..وگرنه لیست باکس مناسب کارشما نیست:بوس:

mmd2009
چهارشنبه 06 مرداد 1389, 12:32 عصر
مگه عدد وارد تکست نمیکنید؟؟!!

samaram
چهارشنبه 06 مرداد 1389, 12:36 عصر
مگه عدد وارد تکست نمیکنید؟؟!!
چرا. ولی اخه اعداد مربوط به واحد پول هستند. کلا هر چی باشه دیگه. عدد رو باید سه رقم سه رقم از راست جدا کرد نه چپ

M.YasPro
دوشنبه 11 مرداد 1389, 12:57 عصر
http://barnamenevis.org/forum/showpost.php?p=487967&postcount=63

robat7
سه شنبه 12 مرداد 1389, 05:47 صبح
privatevoid txtREQFrom_KeyPress(object sender, KeyPressEventArgs e)
{
// if (char.IsNumber(e.KeyChar)) e.Handled = true;// Text box accpet only letters
if (char.IsLetter(e.KeyChar)) e.Handled = true; // Text box accpet only numbers
}



privatevoid txtEach_Enter(object sender, EventArgs e)
{
string s = txtEach.Text;
s = s.Replace(",", "");
txtEach.Text = s;
txtEach.SelectionStart = 0;
txtEach.SelectionLength = txtEach.Text.Length;
}
privatevoid txtEach_Leave(object sender, EventArgs e)
{

if (((TextBox)sender).Text == "") ((TextBox)sender).Text = "0";
if (decimal.Parse(((TextBox)sender).Text) < 0) ((TextBox)sender).Text = "0";
((TextBox)sender).Text = decimal.Parse(((TextBox)sender).Text).ToString("#,#.00");
if (txtEach.Text != "0" || txtEach.Text != "") LineItem_Has_Data_bol = true;
}

airsoft
سه شنبه 12 مرداد 1389, 07:33 صبح
ببین اگه از mask textbox استفاده کنین به ساده گی همه مشکلاتت حل میشه اگه دلیل خاصی ندارین ازش استفاده کنین من تجربه خوبی ازش دارم.

ایمان مدائنی
سه شنبه 12 مرداد 1389, 07:49 صبح
عزيز من يه كد دارم كه نميذاره عدد وارد تكس باكس بشه من خودم از اين كد استفاده مي كنم اين كد اجازه وارد كردن اينتر و بك اسپيس رو ميده





private void textbox1_KeyPress(object sender, KeyPressEventArgs e)



{



if (e.KeyChar == 8 || e.KeyChar == 46)//backspace&.



{ return; }



if (!(e.KeyChar >= '0' && e.KeyChar <= '9'))



e.Handled = true;



}

unique1984
سه شنبه 12 مرداد 1389, 09:56 صبح
سلام
برای سه رقم سه رقم جدا کردن.

using System.Globalization;

private void Txt_TextChanged(object sender, EventArgs e)
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
Txt.Text = Int64.Parse(Txt.Text, NumberStyles.AllowThousands).ToString("N", nfi);
}

برای قبول فقط عدد . (حتی با عمل copy وPaste ، فقط عدد قبول میکنه)

bool TextCheck = false;
bool KeyPressed = false;

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!KeyPressed)
{
if (!TextCheck)
{
TextCheck = true;
string Text = textBox1.Text;
textBox1.Text = "";
for (int i = 0; i < Text.Length; i++)
if (Convert.ToInt16(Text[i]) > 47 && Convert.ToInt16(Text[i]) < 58)
textBox1.Text += Text[i];
textBox1.Select(textBox1.TextLength, 0);
TextCheck = false;
}
KeyPressed = false;
}
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
KeyPressed = true;
e.Handled = Char.IsDigit(e.KeyChar) == false && Char.IsControl(e.KeyChar) == false;
if (!char.IsDigit(e.KeyChar))
KeyPressed = false;

}

دوست عزیز iman_lovely666 ، در textbox شما ، میشه عدد paste کرد.

samaram
سه شنبه 12 مرداد 1389, 14:46 عصر
http://barnamenevis.org/forum/showpost.php?p=487967&postcount=63
راستش نتونستم ازش استفاده کنم. میشه یه کد مثال بزنید




privatevoid txtREQFrom_KeyPress(object sender, KeyPressEventArgs e)
{
// if (char.IsNumber(e.KeyChar)) e.Handled = true;// Text box accpet only letters
if (char.IsLetter(e.KeyChar)) e.Handled = true; // Text box accpet only numbers
}



privatevoid txtEach_Enter(object sender, EventArgs e)
{
string s = txtEach.Text;
s = s.Replace(",", "");
txtEach.Text = s;
txtEach.SelectionStart = 0;
txtEach.SelectionLength = txtEach.Text.Length;
}
privatevoid txtEach_Leave(object sender, EventArgs e)
{

if (((TextBox)sender).Text == "") ((TextBox)sender).Text = "0";
if (decimal.Parse(((TextBox)sender).Text) < 0) ((TextBox)sender).Text = "0";
((TextBox)sender).Text = decimal.Parse(((TextBox)sender).Text).ToString("#,#.00");
if (txtEach.Text != "0" || txtEach.Text != "") LineItem_Has_Data_bol = true;
}

ممنون. به چندتا مشکل برخوردم. اولا جلوی هر عدد دو تا صفر میذاره و بعد از این دو صفر سه تا سه تا جدا میکنه. مثلا 1242 رو به 1,242,00 تبدیل میکنه. ثانیا نفهمیدم اون LineItem_Has_Data_bol = true به چه کار میاد و چی باید جاش بذارم.

ببین اگه از mask textbox استفاده کنین به ساده گی همه مشکلاتت حل میشه اگه دلیل خاصی ندارین ازش استفاده کنین من تجربه خوبی ازش دارم.
آخه تکست باکس متن منو در حال تایپ سه رقم سه رقم جدا نمیکنه

عزيز من يه كد دارم كه نميذاره عدد وارد تكس باكس بشه من خودم از اين كد استفاده مي كنم اين كد اجازه وارد كردن اينتر و بك اسپيس رو ميده





private void textbox1_KeyPress(object sender, KeyPressEventArgs e)



{



if (e.KeyChar == 8 || e.KeyChar == 46)//backspace&.



{ return; }



if (!(e.KeyChar >= '0' && e.KeyChar <= '9'))



e.Handled = true;



}


ممنون. جواب سوال سوم رو گرفتم. اگه میشه برای سوال اول کمکم کنید

سلام
برای سه رقم سه رقم جدا کردن.

using System.Globalization;

private void Txt_TextChanged(object sender, EventArgs e)
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
Txt.Text = Int64.Parse(Txt.Text, NumberStyles.AllowThousands).ToString("N", nfi);
}

برای قبول فقط عدد . (حتی با عمل copy وPaste ، فقط عدد قبول میکنه)

bool TextCheck = false;
bool KeyPressed = false;

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (!KeyPressed)
{
if (!TextCheck)
{
TextCheck = true;
string Text = textBox1.Text;
textBox1.Text = "";
for (int i = 0; i < Text.Length; i++)
if (Convert.ToInt16(Text[i]) > 47 && Convert.ToInt16(Text[i]) < 58)
textBox1.Text += Text[i];
textBox1.Select(textBox1.TextLength, 0);
TextCheck = false;
}
KeyPressed = false;
}
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
KeyPressed = true;
e.Handled = Char.IsDigit(e.KeyChar) == false && Char.IsControl(e.KeyChar) == false;
if (!char.IsDigit(e.KeyChar))
KeyPressed = false;

}

دوست عزیز iman_lovely666 ، در textbox شما ، میشه عدد paste کرد.
ببینید من با استفاده از کد شما اینجوری نوشتم:


bool TextCheck = false;
bool KeyPressed = false;
privatevoid txtpool_TextChanged(object sender, EventArgs e)
{
NumberFormatInfo nfi = newNumberFormatInfo();
nfi.NumberDecimalDigits = 0;
txtpool .Text = Int64.Parse(txtpool .Text , NumberStyles.AllowThousands).ToString("N", nfi);
//------------------------------
if (!KeyPressed)
{
if (!TextCheck)
{
TextCheck = true;
string Text = txtpool .Text ;
txtpool .Text = "";
for (int i = 0; i < Text.Length; i++)
if (Convert.ToInt16(Text[i]) > 47 && Convert.ToInt16(Text[i]) < 58)
txtpool .Text += Text[i];
textBox1.Select(txtpool .TextLength , 0);
TextCheck = false;
}
KeyPressed = false;
}
}

ولی به محض اینکه یه رقم داخلش وارد میکنم اجرای برنامه متوقف میشه و میره سر خط زیر و این پیغام رو میده:


txtpool .Text = Int64.Parse(txtpool .Text , NumberStyles.AllowThousands).ToString("N", nfi);

خطا : Input string was not in a correct format.

unique1984
سه شنبه 12 مرداد 1389, 15:53 عصر
ولی به محض اینکه یه رقم داخلش وارد میکنم اجرای برنامه متوقف میشه و میره سر خط زیر و این پیغام رو میده:
کد:

txtpool .Text = Int64.Parse(txtpool .Text , NumberStyles.AllowThousands).ToString("N", nfi);


اگه کد های مربوط به ایونت KeyPress رو هم بنویسید، مشکلی نخواهید داشت.
موفق باشید.

samaram
سه شنبه 12 مرداد 1389, 15:57 عصر
اگه کد های مربوط به ایونت KeyPress رو هم بنویسید، مشکلی نخواهید داشت.
موفق باشید.
شما که برای ایونت keypress کدی نذاشتید

samaram
سه شنبه 12 مرداد 1389, 17:31 عصر
قسمت های دیگه ی سوال اولم رو حل کردم. فقط مونده این قسمت سه رقم سه رقم جدا کردن. برای سه رقم سه رقم جدا کردن از هر یک از دو کد زیر تو رویداد textchange استفاده میکنم عدد رو اشتباه سه تا سه تا جدا میکنه.
مثلا من میخوام تایپ کنم : 2346900 اما این تایپ میکنه: 9,002,346
یعنی انگار تا یه جایی از یه جهت جدا میکنه و از یه جا دیگه از یه جهت دیگه!!!!

if (((TextBox)sender).Text == "") ((TextBox)sender).Text = "0";
if (decimal.Parse(((TextBox)sender).Text) < 0) ((TextBox)sender).Text = "0";
((TextBox)sender).Text = decimal.Parse(((TextBox)sender).Text).ToString("#,#.00");
if (txtEach.Text != "0" || txtEach.Text != "") LineItem_Has_Data_bol = true;
یا

NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
Txt.Text = Int64.Parse(Txt.Text, NumberStyles.AllowThousands).ToString("N", nfi);

unique1984
سه شنبه 12 مرداد 1389, 18:11 عصر
شما که برای ایونت keypress کدی نذاشتید
چرا گذاشتم ! منتها خطوط آخر بود و باید کمی اسکرول رو جابجا می کردین.


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
KeyPressed = true;
e.Handled = Char.IsDigit(e.KeyChar) == false && Char.IsControl(e.KeyChar) == false;
if (!char.IsDigit(e.KeyChar))
KeyPressed = false;

}

samaram
سه شنبه 12 مرداد 1389, 19:35 عصر
یه سوال دیگه. با عنوان تاپیکم یه کم فرق داره اما خواستم تاپیک جدید نزنم. چطور میتونم تعریف کنم که تو یکی از سلول های گراید ویو سه رقم سه رقم جدا شه؟

M.YasPro
چهارشنبه 13 مرداد 1389, 07:17 صبح
این تاپیک (http://barnamenevis.org/forum/showthread.php?p=621308) رو ببینید .
موفق باشید .

karim_medusa
چهارشنبه 13 مرداد 1389, 08:06 صبح
در قسمت format ستون مورد نظر عبارت زیر رو وارد کنید . واسه سه رقم سه رقم جدا کردن.


#,##0

ehsan3554
چهارشنبه 13 مرداد 1389, 08:45 صبح
اقا من نمیفهمم ینی چی از راست جدا کنه مگه نمی خوای عدد وارد کنی؟

samaram
چهارشنبه 13 مرداد 1389, 10:29 صبح
اقا من نمیفهمم ینی چی از راست جدا کنه مگه نمی خوای عدد وارد کنی؟
خب چرا. ولی از سمت راست عدد سه تا سه تا جدا میکنن دیگه.

samaram
چهارشنبه 13 مرداد 1389, 10:37 صبح
من خودم اومدم اینجوری مساله رو حل کردم:
این کد برای عدم ورود حرف :


privatevoid textBox7_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsLetter(e.KeyChar)) e.Handled = true;
}

این کد برای سه رقم سه رقم جدا کردن:


privatevoid textbox8_TextChanged(object sender, EventArgs e)
{
decimal Number;
if (decimal.TryParse(textbox8 .Text , out Number))
{
textbox8.Text = string.Format("{0:N0}", Number);
textbox8.SelectionStart = textbox8.Text.Length;
}
}

این کلاس هم برای جدا کردن کاما و تبدیل به عدد:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ramin
{
classTextToNumber

{
publicint tonumber(String str)
{
if (str == "")
return (0);
else
{
string temp = "";
for (int i = 0; i < str.Length; i++)
if (str[i] != ',')
temp += str[i];
return (int.Parse(temp));
}
}
}
}

میدونم خیلی کنترل های دیگه میشه انجام داد. اما فعلا برا من همینقدر کافیه

S.Reza
چهارشنبه 13 مرداد 1389, 12:04 عصر
سلام اقا رامین ( درست گفتم :چشمک: )

کد قسمت اول با paste کردن می توان حروف رو واردش کرد

کد قسمت دوم بعد از وارد کردن 5 عدد شروع به جدا کردن می کند و اولین جدا کننده را 4 عدد در نظر می گیره

قسمت سوم رو نگاه نکردم :بامزه::لبخند:

samaram
چهارشنبه 13 مرداد 1389, 19:52 عصر
سلام اقا رامین ( درست گفتم :چشمک: )


کد قسمت اول با paste کردن می توان حروف رو واردش کرد

کد قسمت دوم بعد از وارد کردن 5 عدد شروع به جدا کردن می کند و اولین جدا کننده را 4 عدد در نظر می گیره

قسمت سوم رو نگاه نکردم :بامزه::لبخند:
سمانه و رامین فرقی نمیکنه. دو تاشون یکی هستند:شیطان::قلب:! (الان تاپیک تغییر موضوع میده!:قهقهه:)
آره فرمایش شما در مورد قسمت اول کاملا درسته. ولی قسمت دوم نه ها. من دقیقا همین کد رو استفاده میکنم. سه رقم سه رقم در همون لحظه ی ورود به تکست باکس جدا میکنه

S.Reza
پنج شنبه 14 مرداد 1389, 00:36 صبح
الان که نگاه می کنم می بینم خودم کد رو دستکاری کرده بودم ببخشید ;)

پ.ن: حالا بگو رامین رو از کجا اوردی :-o

Nahid Borna
پنج شنبه 14 مرداد 1389, 09:29 صبح
دوست عزیز من هم همچین مشکلی داشتم و به جای استفاده از int در database از nvarchar استفاده کردم.:متفکر:

samaram
پنج شنبه 14 مرداد 1389, 10:39 صبح
الان که نگاه می کنم می بینم خودم کد رو دستکاری کرده بودم ببخشید ;)

پ.ن: حالا بگو رامین رو از کجا اوردی :-o
یعنی چی رامین رو از کجا آوردم؟!!!!! رامین یه اسمه. سمانه هم یه اسمه!:بامزه::قهقهه:

دوست عزیز من هم همچین مشکلی داشتم و به جای استفاده از int در database از nvarchar استفاده کردم.:متفکر:
خب درست. منتها مساله اونجاست که من دارم رو این فیلد محاسبات انجام میدم. حتی اگه و بانک هم nvarchar ذخیره کنم بالاخره باید دوباره تبدیل به int کنم. پس این عملیات بازم لازمه.