سلام دوستان
میخوام بدونم چیجوری میتونم یک عدد رو که کاربر داخل textBox تایپ میکنه(در حین تایپ کردن)، و یا وقتی میخواهیم یک عدد رو در خروجی نمایش بدهیم، به صورت 3 رقم 3 رقم ارقامش از هم جدا باشه!
مثل این:
12,300,000
خیلی خیلی ممنونم
سلام دوستان
میخوام بدونم چیجوری میتونم یک عدد رو که کاربر داخل textBox تایپ میکنه(در حین تایپ کردن)، و یا وقتی میخواهیم یک عدد رو در خروجی نمایش بدهیم، به صورت 3 رقم 3 رقم ارقامش از هم جدا باشه!
مثل این:
12,300,000
خیلی خیلی ممنونم
خیلی خیلی ممنونم
دوست عزیز
برای textBox باید چیکار کنم؟!
کاربر در حین تایپ کردن، هر سه رقمی که وارد میکنه، یه دونه جدا کننده خود به خود ظاهر بشه!!!
باز هم ممنونم
سلام.
یه کلاس جدید، مثلا TextBoxEx از کلاس TextBox درایو کنید و در متود OnKeyDown، محتوی TextBox رو به اون چیزی که میخواهید تغییر بدید (مثلا در محل مناسب کاما insert کنید). هر وقت که کاما insert کردید، Handled Property رو روی KeyEventArgs ورودی این تابع، set کنید تا کلاس پدر متوجه بشه که شما خودتون فشرده شدن کلید رو handle کردین...
سلام.
برای متوجه شدن از اینکه text مورد نظر در textbox داره Paste میشه، باید WndProc رو override کنید. سپس اونجا Message دریافتی رو نگاه کنید که آیا WM_PASTE هست یا خیر. اگر WM_PASTE بود، یعنی text داره Paste میشه. اونوقت می تونید text مورد نظر رو از Clipboard بگیرید:
const Int32 WM_PASTE = 0x302;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PASTE)
{
String pastedText = Clipboard.GetText();
}
//whatever else....
دوست عزیز باز هم ممنونم از کمکهاتون (;
خیلی عالی بود، مرسی
فقط یک سوال دیگه دارم!
روشی که شما معرفی کردین جواب میده و خیلی هم عالیه
ولی به نظر شما آیا این درسته که هر بار که کاربر یک کلید میزنه داخل textBox، یک رویداد وارد عمل بشه، یکسری دستورات انجام بده و ...!
منظورم اینه که، مثلاً برای اینکه توی textBox به کاربر فقط اجازه ی وارد کردن عدد رو بدهیم، باید خودمون کد بنویسیم و هر بار کاراکترهاش رو تست کنیم! همین کار رو میتونیم با maskedTextBox براحتی انجام بدهیم!
حالا سوال من اینه!
آیا توی خود کامپوننت هایی که داریم، چنین امکانی گنجانده شده یا نه؟!
باز هم ممنون میشم اگر نمونه برنامه ی ساده ای هم اگر در دست دارید برام قرار بدین، مرسی
سلام.
اگر در OnTextChanged اینکارو کنید، دیگه فرصت Undo کردن کلید فشرده شده رو ندارید. بدین معنی که اگر مثلا کاربر کلیدی رو فشار بده، ابتدا اون حرف روی TextBox ظاهر میشه و بعد تابع مورد نظر Call میشه. اگر این مساله براتون مشکلی پیش بوجود نیاره، میتونید کد مورد نظرتون رو در این متود بنویسید.
در رویداد OnTextChanged چنانچه هر تغییری در text مورد نظر انجام بدید، دوباره همون رویداد OnTextChanged فراخوانی میشه و همینطور الی آخر، نتیجه اینکه برنامه توی حلقه ی بی نهایت میفته و crash میکنه.
همیشه من از همین رویداد استفاده میکنم. اینکه شما با هر تغییر یه رشته که حاوی عدد باشه رو فرمت بندی کنی هیچ crash رو باعث نمیشه
عالی بود دوست عزیز
ممنونم(;
با سلام
در مورد این تاپیک من یه مشکل عجیب دارم،
این کار رو توى یک وبسایت انجام دادم ولى روى بعضى از دستگاهها غلط دیده مىشه.
مثلاً یک صفحهى خاص با تمام شرایط یکسان یکجا عدد به صورت 123,000,000 دیده مىشه و روى بعضى از دستگاهها به صورت 000,123,000 ( همه دستگاهها IE 6.0 دارند ) .
حدس زدم مربوط به Regional and language options باشه اما هیچ فرقى بین دستگاهها ندیدم.
صبا صبوحى
خدمت تمامی دوستان عزیز عرض کنم که خوشبختانه با تلاش خودم و نیز کمک بسیار زیاد دوستان عزیزمون، یک کامپوننت ساختم که دقیقاً همین چیزی هست که دنبالش بودم.
با یکسری کدهای ساده هم کاری کردم که به جز عدد کاربر نتونه چیز دیگه ای وارد کنه! حتی با Copy-Paste!
البته ممکنه یکسری مشکلات و باگهایی هم داشته باشه که ممنون میشم یک تست بزنید این کامپوننت رو و نتیجه اش رو اعلام کنید.
DivShare File - decimalTextBox.rar
ضمنا سایت http://www.divshare.com فیلتره، نمیشه تو خود برنامه نویس آپ کنید
البته اون مشکل رو من حل کردم
ولی یه مشکل اساسی داره، اونم اینه که تا 19 عدد رو بیشتر جدا نمی کنه
12345678901234567890123456789 -------> 123.456.789.012.345.678.90123456789