PDA

View Full Version : نمایش عدد به همراه جدا کننده ی 3 رقم 3 رقم !



newgoldenman
پنج شنبه 28 تیر 1386, 10:20 صبح
سلام دوستان

میخوام بدونم چیجوری میتونم یک عدد رو که کاربر داخل textBox تایپ میکنه(در حین تایپ کردن)، و یا وقتی میخواهیم یک عدد رو در خروجی نمایش بدهیم، به صورت 3 رقم 3 رقم ارقامش از هم جدا باشه!

مثل این:
12,300,000

خیلی خیلی ممنونم

mehdi.mousavi
پنج شنبه 28 تیر 1386, 10:42 صبح
سلام دوستان

میخوام بدونم چیجوری میتونم یک عدد رو که کاربر داخل textBox تایپ میکنه(در حین تایپ کردن)، و یا وقتی میخواهیم یک عدد رو در خروجی نمایش بدهیم، به صورت 3 رقم 3 رقم ارقامش از هم جدا باشه!

مثل این:
12,300,000

خیلی خیلی ممنونم


سلام.


String s = String.Format("{0:N}", 12345);

newgoldenman
پنج شنبه 28 تیر 1386, 11:24 صبح
خیلی خیلی ممنونم
دوست عزیز
برای textBox باید چیکار کنم؟!
کاربر در حین تایپ کردن، هر سه رقمی که وارد میکنه، یه دونه جدا کننده خود به خود ظاهر بشه!!!

باز هم ممنونم

mehdi.mousavi
پنج شنبه 28 تیر 1386, 13:10 عصر
خیلی خیلی ممنونم
دوست عزیز
برای textBox باید چیکار کنم؟!
کاربر در حین تایپ کردن، هر سه رقمی که وارد میکنه، یه دونه جدا کننده خود به خود ظاهر بشه!!!

باز هم ممنونم

سلام.
یه کلاس جدید، مثلا TextBoxEx از کلاس TextBox درایو کنید و در متود OnKeyDown، محتوی TextBox رو به اون چیزی که میخواهید تغییر بدید (مثلا در محل مناسب کاما insert کنید). هر وقت که کاما insert کردید، Handled Property رو روی KeyEventArgs ورودی این تابع، set کنید تا کلاس پدر متوجه بشه که شما خودتون فشرده شدن کلید رو handle کردین...

newgoldenman
پنج شنبه 28 تیر 1386, 18:34 عصر
سلام.
یه کلاس جدید، مثلا TextBoxEx از کلاس TextBox درایو کنید و در متود OnKeyDown، محتوی TextBox رو به اون چیزی که میخواهید تغییر بدید (مثلا در محل مناسب کاما insert کنید). هر وقت که کاما insert کردید، Handled Property رو روی KeyEventArgs ورودی این تابع، set کنید تا کلاس پدر متوجه بشه که شما خودتون فشرده شدن کلید رو handle کردین...

دوست عزیز
از راهنماییتون متشکرم
یه سوال دارم، این محل مناسب مهم هست که در صورت پاسخ به این سوال، میشه یه کارایی کرد! اگر کلیدهای زده شده توسط کاربر رو بشمریم، میشه! ولی اگر کاربر عددش رو Copy Paste کنه چی؟ !

ممنون میشم اگر نمونه ی آماده ای دارید، برام قرار بدین:لبخندساده:

mehdi.mousavi
پنج شنبه 28 تیر 1386, 18:49 عصر
دوست عزیز
از راهنماییتون متشکرم
یه سوال دارم، این محل مناسب مهم هست که در صورت پاسخ به این سوال، میشه یه کارایی کرد! اگر کلیدهای زده شده توسط کاربر رو بشمریم، میشه! ولی اگر کاربر عددش رو Copy Paste کنه چی؟ !
ممنون میشم اگر نمونه ی آماده ای دارید، برام قرار بدین:لبخندساده:


سلام.
برای متوجه شدن از اینکه 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....

newgoldenman
پنج شنبه 28 تیر 1386, 20:15 عصر
دوست عزیز باز هم ممنونم از کمکهاتون (;

خیلی عالی بود، مرسی
فقط یک سوال دیگه دارم!
روشی که شما معرفی کردین جواب میده و خیلی هم عالیه
ولی به نظر شما آیا این درسته که هر بار که کاربر یک کلید میزنه داخل textBox، یک رویداد وارد عمل بشه، یکسری دستورات انجام بده و ...!

منظورم اینه که، مثلاً برای اینکه توی textBox به کاربر فقط اجازه ی وارد کردن عدد رو بدهیم، باید خودمون کد بنویسیم و هر بار کاراکترهاش رو تست کنیم! همین کار رو میتونیم با maskedTextBox براحتی انجام بدهیم!
حالا سوال من اینه!
آیا توی خود کامپوننت هایی که داریم، چنین امکانی گنجانده شده یا نه؟!

باز هم ممنون میشم اگر نمونه برنامه ی ساده ای هم اگر در دست دارید برام قرار بدین، مرسی

egoldashraf
پنج شنبه 28 تیر 1386, 20:18 عصر
فکر میکنم textChange مکان مناسب تریه

mehdi.mousavi
پنج شنبه 28 تیر 1386, 20:43 عصر
فکر میکنم textChange مکان مناسب تریه


سلام.
اگر در OnTextChanged اینکارو کنید، دیگه فرصت Undo کردن کلید فشرده شده رو ندارید. بدین معنی که اگر مثلا کاربر کلیدی رو فشار بده، ابتدا اون حرف روی TextBox ظاهر میشه و بعد تابع مورد نظر Call میشه. اگر این مساله براتون مشکلی پیش بوجود نیاره، میتونید کد مورد نظرتون رو در این متود بنویسید.

hdv212
پنج شنبه 28 تیر 1386, 23:40 عصر
در رویداد OnTextChanged چنانچه هر تغییری در text مورد نظر انجام بدید، دوباره همون رویداد OnTextChanged فراخوانی میشه و همینطور الی آخر، نتیجه اینکه برنامه توی حلقه ی بی نهایت میفته و crash میکنه.

egoldashraf
پنج شنبه 28 تیر 1386, 23:45 عصر
همیشه من از همین رویداد استفاده میکنم. اینکه شما با هر تغییر یه رشته که حاوی عدد باشه رو فرمت بندی کنی هیچ crash رو باعث نمیشه

newgoldenman
جمعه 29 تیر 1386, 14:36 عصر
همیشه من از همین رویداد استفاده میکنم. اینکه شما با هر تغییر یه رشته که حاوی عدد باشه رو فرمت بندی کنی هیچ crash رو باعث نمیشه

دوست عزیز
میشه خواهش کنم یک نمونه برای ما قرار بدین:چشمک:

egoldashraf
جمعه 29 تیر 1386, 15:15 عصر
اینم نمونه!

newgoldenman
جمعه 29 تیر 1386, 19:18 عصر
عالی بود دوست عزیز
ممنونم(;

SabaSabouhi
جمعه 29 تیر 1386, 20:39 عصر
با سلام
در مورد این تاپیک من یه مشکل عجیب دارم،
این کار رو توى یک وب‌سایت انجام دادم ولى روى بعضى از دستگاه‌ها غلط دیده مى‌شه.
مثلاً یک صفحه‌ى خاص با تمام شرایط یکسان یکجا عدد به صورت 123,000,000 دیده مىشه و روى بعضى از دستگاه‌ها به صورت 000,123,000 ( همه دستگاه‌ها IE 6.0 دارند ) .

حدس زدم مربوط به Regional and language options باشه اما هیچ فرقى بین دستگاه‌ها ندیدم.

صبا صبوحى

newgoldenman
یک شنبه 31 تیر 1386, 21:43 عصر
خدمت تمامی دوستان عزیز عرض کنم که خوشبختانه با تلاش خودم و نیز کمک بسیار زیاد دوستان عزیزمون، یک کامپوننت ساختم که دقیقاً همین چیزی هست که دنبالش بودم.
با یکسری کدهای ساده هم کاری کردم که به جز عدد کاربر نتونه چیز دیگه ای وارد کنه! حتی با Copy-Paste!

البته ممکنه یکسری مشکلات و باگهایی هم داشته باشه که ممنون میشم یک تست بزنید این کامپوننت رو و نتیجه اش رو اعلام کنید.
DivShare File - decimalTextBox.rar (http://www.divshare.com/download/1341156-bb8)

mr_mtc
چهارشنبه 24 مرداد 1386, 16:23 عصر
اینم نمونه!

این کد یک ایراد داره
چون طول رشته رو از روی خاصیت Text حساب میکنه ؛ پس تعداد (،) را نمیشماره

چی میشه
123456789 -------> 123.568.974

:گریه::گریه:

mr_mtc
چهارشنبه 24 مرداد 1386, 16:24 عصر
ضمنا سایت http://www.divshare.com فیلتره، نمیشه تو خود برنامه نویس آپ کنید

mr_mtc
چهارشنبه 24 مرداد 1386, 16:40 عصر
البته اون مشکل رو من حل کردم

ولی یه مشکل اساسی داره، اونم اینه که تا 19 عدد رو بیشتر جدا نمی کنه

12345678901234567890123456789 -------> 123.456.789.012.345.678.90123456789