PDA

View Full Version : جدا کردن 3 رقم 3 رقم اعداد جهت نمایش مقادیر پولی



iranrose63
سه شنبه 24 بهمن 1385, 08:53 صبح
چه طوری می تونم وقتی اعداد رو تو یه textbox وارد می کنم سه رقم سه رقم اونها رو از هم جدا کنم

hrshojaei
سه شنبه 24 بهمن 1385, 11:08 صبح
سلام ، امیدوارم این بتونه کمکت کنه
در رویداد KeyPress تکست باکس بنویس

if (char.IsLetter(e.KeyChar))
e.Handled = true;
بعد در رویداد TextChanged بنویس

Int64 N;
try
{
String S;
S = NumericT.Text.Replace(",", "");
N = Convert.ToInt64(S);
NumericT.Text = N.ToString("#,#");
NumericT.Select(NumericT.Text.Length, 1);
}
catch
{
}
finally
{
this.Invalidate();
}

که NumericT اسم تکست باکسه شماست .
البته یه خورده ایراد داره ولی یکم باهاش ور بری کامل تر میشه . می تونی یک کلاس برای این نوع تکست باکس بسازی که بتونی به ToolBox اضافش کنی .
راستی ببخشید کد یه خورده قاطیه . نمی دونم کد رو چطور باید Paste کرد .

Alireza_Salehi
سه شنبه 24 بهمن 1385, 13:03 عصر
private void textBox1_TextChanged(object sender, EventArgs e)
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
textBox1.Text = Decimal.Parse(textBox1.Text, NumberStyles.AllowThousands).ToString("N", nfi);
textBox1.Select(textBox1.Text.Length, 0);
}


با توجه به مقدار و اندازه عددی که وارد میشه نوع متغییر تعریف شده را تغییر بده (هر چه عدد بزرگتر متغییر بزرگتر)!

iranrose63
چهارشنبه 25 بهمن 1385, 11:57 صبح
آقای صالحی از جوابتون متشکرم ولی متوجه نشدم منظورتون از توضیحی که در پایان دادید چیه
و اینکه اگه بخوام عدد اعشاری بگیرم چیکار باید کرد چون کدی که شما فرستادید برای اعداد اعشاری خطا میده

Alireza_Salehi
چهارشنبه 25 بهمن 1385, 17:08 عصر
منظورم این بود که محدوده عددی که وارد میشه آنقدر زیاد نشه که خطای سرریز بده (بزرگترین نوع داده را انتخاب کنید- در قسمت Parse )

برای انواع مختلف اعداد قسمت FormatString (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconstandardnumericformatstrings.asp) (پارامتر "N") و NumberStyle (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemglobalizationnumberstylesclasstopic.asp ) رو در حالت های مختلف چک کنید.

اعشاریش رو هم تست نکردم تا حالا، یه کم با این فرمت هاش ور برید درست میشه(لینک های زیر رو ببینید)!
Standard Numeric Format Strings (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconstandardnumericformatstrings.asp)
NumberStyles Enumeration (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemglobalizationnumberstylesclasstopic.asp )

cactuskhan
شنبه 05 اسفند 1385, 09:06 صبح
private void textBox1_TextChanged(object sender, EventArgs e)
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalDigits = 0;
textBox1.Text = Decimal.Parse(textBox1.Text, NumberStyles.AllowThousands).ToString("N", nfi);
textBox1.Select(textBox1.Text.Length, 0);
}


با توجه به مقدار و اندازه عددی که وارد میشه نوع متغییر تعریف شده را تغییر بده (هر چه عدد بزرگتر متغییر بزرگتر)!

'System.Web.UI.WebControls.TextBox' does not contain a definition for 'Select'

Alireza_Salehi
شنبه 05 اسفند 1385, 09:15 صبح
'System.Web.UI.WebControls.TextBox' does not contain a definition for 'Select'

این کد مال ویندوز نه وب ، اونجا باید از جاوا اسکریپت استفاده کنی!

lomir
شنبه 05 اسفند 1385, 09:21 صبح
از این استفاده کن ولی باید کمی کدو ست بکنی با چیزی که می خواهی
(string.Format("{0:0,0}", 876567876

mahtab_18
دوشنبه 21 اسفند 1385, 13:32 عصر
سلام

من دستوری نوشتم که با استفاده از اون فرمت text را تغییر می ده .
منظورم اینه که یک text box روی فرم گذاشتم در حالت اجرا وقتی داخل textbox چیزی می نویسم خودش 3 تا 3 تا علامت (،) قرار می دهد . ولی وقتی دکمه backspace را هم می زنیم باز هم به حساب عدد فرض می کند و بسته به اون شماره می اندازد و اینجاست که ترتیب به هم می خوره . می خواهم کاری کنم که دکمه backspace را به حساب نیاره . ممنون می شم کمکم کنید.

iranrose63
دوشنبه 21 اسفند 1385, 16:52 عصر
نمی دونم شما برای جدا کردن سه رقم سه رقم اعداد چیکار کردی ولی من این مشکل رو داشتم و تو سایت مطرح کردم یکی از دوستان بهم جواب داد جوابشم این بود

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

البته اول باید System.Globalization رو به برنامت اضافه کنی

mahtab_18
سه شنبه 22 اسفند 1385, 07:13 صبح
ممنون از جوابتون خیلی کمکم کرد ولی من هنوز مشکل دارم:

1. من می خواهم در حین نوشتن تغییرات ایجاد بشه ولی این کاری که شما گفتید بعد از نوشتن کل اعداد و زدن یک کلید ایجاد می شود.
2. در کدام رویداد باید این تکه برنامه را بنویسم.

mahtab_18
سه شنبه 22 اسفند 1385, 07:28 صبح
سلام

جوابتون عالی بود من ابتدا اشتباهاً در رویداد click برنامه را نوشتم ولی بعد با جابجایی قطعه برنامه در رویداد text-change به جواب رسیدم.

فقط یه سوال و اون اینکه منظور از "N" چیست؟

iranrose63
سه شنبه 22 اسفند 1385, 10:42 صبح
"N" یعنی اینکه به فرمت عددی تبدیل بشه میتونی برای اینکه اطلاعاتی در این رابطه به دست بیاری تو Help خود vs جستجو کنی دنبال NumberFormatInfo Class باش
یه سرچ تو سایت بکن تو اون تایپک که من جواب گرفتم یه چند تا لینک بود که میتونی ازش استفاده کنی

sabaab1359
شنبه 18 فروردین 1386, 20:16 عصر
سلام.
من می خواستم از این کدی که گذاشتید استفاده کنم ولی روی سطر
()textBox1.Text = Decimal.Parse(textBox1.Text, NumberStyles.AllowThousands).ToString
خطای
Input string was not in a correct format. می گیره. چکار کنم؟

iranrose63
یک شنبه 19 فروردین 1386, 10:30 صبح
من فکر می کنم می خواستی عدد اعشاری وارد کنی و وقتی ممیز میزدی این خطا رو بهت میداده این کد فقط برای اعداد صحیح قابل استفاده است .
در ضمن اگر ممیز نمیزدی و فقط عدد وارد می کردی نباید بهت خطا بده ولی اون طوری که تو نوشتی اعداد رو سه رقم سه رقم جدا نمیکنه چون توی تابع ToString فرمت تبدیلت رو مشخص نکردی

sabaab1359
دوشنبه 20 فروردین 1386, 15:06 عصر
فرمت تبدیل را مشخص کردم. دقیقا همانطور که iranrose63 نوشته (N",nfi") ولی اینجا ننوشتم. در ضمن خطا را موقع debug کردن می گیره .

rezaiy.ali
چهارشنبه 02 آبان 1386, 13:37 عصر
با سلام
من یه تکس باکس دارم که مبلغ پرداختی رو کاربر درون او وارد می کنه
من می خوام زمانی که کاربر در حال وارد کردن مقدار است به صورت اتومات هر سه رقمی که کاربر وارد کد یه ، قرار بده.
چطور میشه این کار را انجام داد
توجه(زمانی که کاربر Back Space زد باید ، ها جا به جا شوند)
12،411،254
بعد از زدن Back Space
1،241،125

babak23
چهارشنبه 02 آبان 1386, 14:22 عصر
در رویداد مربوط به text change مربوط به تکست باکس این کد را بنویس



private void textBox1_TextChanged(object sender, EventArgs e)
{
decimal Number;
if (decimal.TryParse(textBox1.Text, out Number))
{
textBox1.Text = string.Format("{0:N0}", Number);
textBox1.SelectionStart = textBox1.Text.Length;
}
}


در صورت جستجو به این موارد بر میخوردی

http://barnamenevis.org/forum/showthread.php?t=74386&highlight=%D8%AA%DA%A9%D8%B3%D8%AA+%D8%A8%D8%A7%DA %A9%D8%B3

http://barnamenevis.org/forum/showthread.php?t=81126&highlight=%D8%AA%DA%A9%D8%B3%D8%AA+%D8%A8%D8%A7%DA %A9%D8%B3

http://barnamenevis.org/forum/showthread.php?t=81408&highlight=%D8%AA%DA%A9%D8%B3%D8%AA+%D8%A8%D8%A7%DA %A9%D8%B3

http://barnamenevis.org/forum/showthread.php?t=75685

vahid662
شنبه 13 بهمن 1386, 22:33 عصر
سلام
چطوری می تونیم اعدادی رو که در text box وارد می کنیم سه رقم سه رقم جدا کنیم؟

hassan razavi
شنبه 13 بهمن 1386, 22:45 عصر
http://barnamenevis.org/forum/search.php?searchid=730809

silentrise
یک شنبه 14 بهمن 1386, 05:03 صبح
سلام
از متد Substring در کلاس
string می توتنی استفاده کنی.

Substring(x, y)

x= نقطه شروع
y=نقطه پایان
راستی ورودی باید
string باشه.
باسپاس.

Masoud_TB
یک شنبه 14 بهمن 1386, 13:14 عصر
اگر منظورت در نحوه نمایش است کافیه که بهش FormatString بدی. البته می تونی یک کلاس جدید ایجاد کنی که از TextBox به ارث بره و سپس توی اون این رفتار رو اضافه کنی:


txtNumber.Text = string.Format("{0:n}",2500000);



اینم مثالی برای همین موضوع

vahid662
دوشنبه 15 بهمن 1386, 13:57 عصر
اگر منظورت در نحوه نمایش است کافیه که بهش FormatString بدی. البته می تونی یک کلاس جدید ایجاد کنی که از TextBox به ارث بره و سپس توی اون این رفتار رو اضافه کنی:


txtNumber.Text = string.Format("{0:n}",2500000);

اینم مثالی برای همین موضوع

مرسی کارم درست شد اما حالا چطوری می تونیم اون رو به حالت اولیه در بیاوریم چون عددی که در این textBox وارد می شه باید در دیتا بیس ذخیره شود.

Masoud_TB
دوشنبه 15 بهمن 1386, 14:24 عصر
توی اون مثالی که برات گذاشتم یک Property به نام Value وجود داره که مقدار رو بر می گردونه می تونی از اون استفاده کنی.

vahid662
دوشنبه 15 بهمن 1386, 20:05 عصر
بازم مرسی
حالا کسی می دونه تو DataGridView چطوری باید سه رقم سه رقم عدد ها رو جدا کنیم

boof1363
پنج شنبه 02 اسفند 1386, 14:43 عصر
با سلام میخواستم بدونم چطور میشه تو یه textbox کاربر یه مقدار پولی وارد کنه و سیستم خودش سه رقم سه رقم این اعداد رو از هم جدا کنه که کاربر اشتباه این مقادیر رو وارد نکنه

silentrise
پنج شنبه 02 اسفند 1386, 20:53 عصر
سلام
این نیز در این سایت مطرح شده بود !
همین سه رقم سه رقم رو سرچ کن !

boof1363
شنبه 04 اسفند 1386, 14:52 عصر
سلام
پیداش نکردم میشه بیشتر توضیح بدین

razavi_university
دوشنبه 05 فروردین 1387, 00:56 صبح
من برای یک برنامه نیاز به TextBoxی برای کار کردن با مقادیر پول دارم
یعنی بعد از وارد شده عدد درون آن، سه تا سه تا جدا کرده و ریال را به انتهای آن اضافه کند.
تا اینجاشو مشکلی ندارم (غیر از اینکه ریال رو سمت راست عدد می‌گذاره و سمت چپش نمی گذاره)

مشکل من در برگردوندن مقدار داخل TextBox برای ذخیره کردن داخل دیتابیس است.
(اول روش حلقه و کار با رشته برای اضافه کردن و حذف علامات و ریال به ذهنم رسید جواب میده ولی خوشم نیومد جالب نیست )
از چه روشی می‌تونم برای برگردوندن عدد درون TextBox استفاده کنم.
این هم کدی که استفاده می‌کنم:


private void txtBxPrice_Leave(object sender, EventArgs e)
{
TextBox txtBxTest = sender as TextBox;

if (((txtBxTest.Text.IndexOf("ریال") == -1) & (txtBxTest.Text.IndexOf(',') == -1) & (txtBxTest.Text != "")))
{
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.CurrencyDecimalDigits = 0;
nfi.CurrencyGroupSeparator = ",";
nfi.CurrencySymbol = "ریال";
txtBxTest.Text = Int64.Parse(txtBxTest.Text, NumberStyles.AllowThousands|NumberStyles.AllowCurr encySymbol).ToString("C", nfi);
}
}

hdv212
دوشنبه 05 فروردین 1387, 13:56 عصر
من فکر میکنم مشکل شما حذف کردن علامت ریال از مقدار پول برای ذخیره در دیتابیسه، اگه درست متوجه شده باشم، یه نمونه کد اینجا برات گذاشتم که بتونی از راه ساده تری ریال رو حذف کنی :

razavi_university
دوشنبه 05 فروردین 1387, 17:56 عصر
درسته من توی برداشتن علامت ',' و "ریال" مشکل دارم.
هیچ راه دیگه‌ای نداره که نخوام از کد زیر استفاده کنم.:افسرده:


this.textBox1.Text.Replace(" ریال", string.Empty);
نمیشه یه جورایی با این کد درستش کرد


Int64.Parse(txtBxTest.Text, NumberStyles.AllowThousands|NumberStyles.AllowCurr encySymbol)
من هرچی تلاش کردم نشد :ناراحت:
و یا حداقل یه روش دیگه برای اضافه و حذف کردن علامت "ریال" و "," البته به جز حلقه و کار با String
ممنون

hdv212
دوشنبه 05 فروردین 1387, 18:35 عصر
دقیقا هدفت از این کار چیه و چرا نمیخوای از اون کد استفاده کنی ؟

البته به جز حلقه و کار با String
تا اونجایی که ممکنه از کار کردن با String اونم در حلقه، دوری کن، چون این کار سربار زیادی روی حافظه داره.

razavi_university
دوشنبه 05 فروردین 1387, 18:49 عصر
من مقادیر رو با پارامتر به SQL Command اضافه می کنم و بعد . . .
اول می‌خواستم متد get Text کنترل TextBox رو Override کنم ولی نشد

نمی‌خوام موقعی که می‌خوام مقادیر رو به پارامتر ها اضافه کنم کد نویسی زیادی انجام بشه


cmd.Parameters.AddWithValue("@mprice", txtBxPrice.Text);




تا اونجایی که ممکنه از کار کردن با String اونم در حلقه، دوری کن، چون این کار سربار زیادی روی حافظه داره.

نه من حلقه رو برای سه تا سه تا کردن اعداد استفاده می‌کردم و بعد از خروج از حلقه "ریال" رو Insert می‌کردم برای حذفش هم از همون روشی که خودتون استفاده کردین استفاده کردم.
البته میشه قبل از اینکه تغییرات روی مقادیر داخل TextBox اعمال بشه اون رو داخل یک متغیر دیگه ذخیره کرد و بعد اون متغیر رو داخل دیتا‌بیس ذخیره کرد.( ولی این هم میشه کار اضافه):ناراحت:
تا اینکه اون روشی که در پست اول هست رو استفاده کردم راحت قرار میده ولی برداشتنش ؟؟؟

hdv212
دوشنبه 05 فروردین 1387, 19:39 عصر
باز اگه منظورت رو متوجه شده باشم، میخوای ریال رو حذف کنی و به آبجکت SqlCommand ات پاس کنی، اونم با حداقل کد نویسی، خب این چطوره :

cmd.Parameters.AddWithValue("@mprice", this.textBox1.Text.Replace(" ریال", string.Empty));

razavi_university
سه شنبه 06 فروردین 1387, 02:46 صبح
خب با "," ها چه کنم که بین هر سه رقم اضافه شده؟؟

egoldashraf
سه شنبه 06 فروردین 1387, 02:59 صبح
public override string Text
{
get
{
return base.Text.Trim().Replace(",", "");
}
set
{
base.Text = value;
}
}

choobin84
سه شنبه 06 فروردین 1387, 09:23 صبح
خب با "," ها چه کنم که بین هر سه رقم اضافه شده؟؟
اصلا چه لزومی داره که کلمه "ریال" داخل خود تکست باکس بیاد.
مهم علامت کاماست که خیلی راحت میشه ورش داشت.
"ریال" رو داخل یک لیبل بگذارید.

razavi_university
سه شنبه 06 فروردین 1387, 10:18 صبح
خب چه لزومی داره ما به جای حل مسئله صورت مسئله رو تغییر بدیم:متفکر:
همانطوری که میدونین در نرم‌افزار‌های تحت ویندوز(مثلا مجموعه Office) مقادیر Currency که با اسامی مختلف (Money) نامیده می‌شوند. واحد پول مکانی که برای ویندوز مشخص شده است (در regional and language option) را به انتهای عدد اضافه می کنند.(داخل خود TextBox)

hdv212
سه شنبه 06 فروردین 1387, 12:37 عصر
خب علامت "," هم از همون طریق میتونی حذفش کنی، کدش رو هم egoldashraf در پست 8 برات نوشته.

razavi_university
چهارشنبه 07 فروردین 1387, 01:44 صبح
راهی نداره که بشه از این کد استفاده کرد


Int64.Parse(txtBxTest.Text, NumberStyles.AllowThousands|NumberStyles.AllowCurr encySymbol);

razavi_university
جمعه 09 فروردین 1387, 00:48 صبح
آخر نتونستم از همون کد بالایی استفاده کنم
ولی برای کم کردن کد نویسی در برنامه ام یک TextBox سفارشی نوشتم که اون کارهایی که می‌خوام رو انجام میده
1- اضافه کردن "ریال" و "," به اعداد
2- دادن خروجی عددی در یک متغیر جداگانه
2- selectAll شدن در هنگام فوکوس گرفتن
3- گرفتن فقط اعداد(0 1 2 3 ... 8 9) و کلید‌های کنترلی

اگه جاییش مشکل داره و یا امکانات دیگه‌ای لازم داده تغییر داده/ بهش اضافه کنید و مجددا آپ نمایید.
ممنون

rezaiy.ali
جمعه 09 فروردین 1387, 08:44 صبح
با سلام
لطفا فایل را چک کنید
من نتونستم فایل را باز کنم به گیر می خوردم
متشکرم

razavi_university
جمعه 09 فروردین 1387, 12:12 عصر
چک شد مشکلی نداشت (مشکلتون در دانلود برنامه است یا باز کردن اون در روی کامپیوترتون)
مجددا اون رو به صورت zip هم آپلود می‌کنم تا اگه با rar مشکلی دارید حل بشه

ezamnejad
یک شنبه 18 فروردین 1387, 17:55 عصر
با سلام و کسب اجازه از آقای razavi_university تغییراتی در این کنترل ایجاد کردم که باعث کمتر شدن و ساده تر شدن کدها شده . همچنین مقدار بازگشتی خاصیت Value به decimal تغییر کرده که کاربر حتی با خالی بودن TextBox مقدار صفر را دریافت میکنه . خاصیت جدیدی از نوع string به نام ValueWithSeperator هم اضافه شده که مقدار وارد شده در کنترل را سه تا سه تا جدا میکنه .
خاصیت RightToLeft کنترل هم بدون دلیل override شده بود که حذف شد . اما اگر این کنترل صرفا برای این طراحی شده که اطلاعات را راست به چپ نمایش بده میشه این خاص را به این شکل بازنویسی کرد تا امکان تغییرش توسط کاربر وجود نداشته باشد .


public override RightToLeft RightToLeft
{
get
{
return base.RightToLeft;
}
set
{
base.RightToLeft = RightToLeft.Yes;
}
}
نتونستم آیکونش را به صورت دلخواه تغییر بدهم ولی الان آیکونش مثل آیکون TextBox شده .

razavi_university
یک شنبه 18 فروردین 1387, 22:53 عصر
خواهش می‌کنم این تاپیک برای همین‌کاره
دوست عزیز نسخه بعدی این کنترل رو چند روز پیش در قسمت نمونه برنامه‌ها گذاشتم که تقریبا یکم کدنویسیش کمتر شده و بهینه‌تر که البته نسخه جدید رو فقط در قسمت نمونه برنامه‌ها گذاشتم واینجا نگذاشتم(چون این تاپیک یکم قدیمی شده بود برای اینکه تاپیک رو بدون دلیل بالا نیارم ودو بار ضمیمه نکنم)
حالت 3تا 3تا جدا شدن با Override کردن خاصیت Text انجام شده. این کنترل برای کار با مقادیر پولی فارسی است، بنابراین فکر می‌کنم اعداد داخل ان باید به شکل فارسی نمایش داده شوند. به همین علت کنترل باید Right to left باشد.
در مورد نوع بازگشتی Value بهتره String باشه تا کاربر در مواقع نیاز به نوع مورد نظر خودش تبدیل کنه، (چون من در برنامه ام مقدار Value رو به پارامتر‌های SqlCommand می‌فرستم نیازی به تغییر نوعش نبود)
نسخه‌جدیدتر در قسمت نمونه‌برنامه‌ها (http://barnamenevis.org/forum/showpost.php?p=487967&postcount=62)

sahmah65
یک شنبه 16 تیر 1387, 23:06 عصر
دوست عزیز اینکه با تکست باکس معمولی فرقی نداره نتیجه اجرا رو سیستم من :
http://irapic.com/uploads/1215427219.jpg

razavi_university
یک شنبه 16 تیر 1387, 23:11 عصر
دوست عزیز اینکه با تکست باکس معمولی فرقی نداره نتیجه اجرا رو سیستم من :

مطمئنی ؟؟؟ :متعجب: :متعجب: :متعجب:

jeus
دوشنبه 17 تیر 1387, 04:17 صبح
samah65 کدام فایل را شما دانلود کردید مال آقای رضوی را یا از آقای ezamnejad را ؟

sahmah65
دوشنبه 17 تیر 1387, 06:20 صبح
samah65 کدام فایل را شما دانلود کردید مال آقای رضوی را یا از آقای ezamnejad را ؟

مال آقای رضوی رو و برای خودمن هم عجیب بود که چرا اینطوری شد.

Hosein.Zarei
سه شنبه 18 تیر 1387, 23:19 عصر
سلام دوستان

درباره Money TextBox باید بگویم که اگر مشکلات آن رفع بشده در بسیاری از برنامه کاربرد خواهد داشت.

1- چسبدیدن و نزیکی زیاد ریال به اعداد می باشد.

2- در صورتی که CurrencySymbol خالی باشد خطا می دهد.

3- با اعشار مشکل دارد و آن را حذف می کند.

ممنون می شوم که خطاهای آن را رفع کنید و به من اطلاع دهید.

razavi_university
چهارشنبه 19 تیر 1387, 01:21 صبح
دوست عزیز من هم واسه همین سورسشو رو گذاشتم که شما بتونین خودتون تغییرات لازم واسه کارتون رو بهش بدین ولی تا حد امکان سعی کردم امکاناتش عمومیت داشته باشه
در مورد خطاهایی که فرمودین:
1- فکر نمی کنم بیشتر از یک فاصله جالب باشه (از نظر من جالب نبود تفاوت در سلیقه همینه دیگه)
2- خوب آخه واسه من پیش نیومد که بخوام CurrencySymbol رو خالی بگذارم همیشه یه چیزی می گذاشتم (ریال، کیلو و ...)
3- واسه کار من نیازی به اعشار نداشت واسه همین عمدا حذفش کردم

نتیجه گیری آخر : من چون نمی دونم شما چه استفاده ای ازش می خوایید بکنید بهتره خودتون بر حسب نیازتون تغییرش بدین و نسخه نهایی رو هم همینجا قرار بدین تا سایر دوستان هم استفاده کنند

Hosein.Zarei
چهارشنبه 19 تیر 1387, 21:08 عصر
من برای گرم و کمتر نیاز به اعشار دارم بنابراین هرچه خواستم کد آن را عوض کنم نتوانستم نیاز به اعشار را اضافه کنم.
در مورد فاصله هم باید بگویم که اینگونه نشان می دهد:
456,544,100ریال
اگر می شد که قابلیت گذاشتن فاصله به آن اضافه کرد مناسب تر هست:
456,544,100 ریال
من برای این مشکل هرچه سعی کردم ولی حل نشد.
این یکی مشکل زیاد حاد نیست ولی من می خواستم که فقط اعداد را در text نمایش بدهم و ریال را در caption. این مشکل نیز نتوانستم رفع کنم.
بنابراین مشکل را حل کنید یا طریق رفع مشکل را به من راهنمایی کنید.
با تشکر از زحماتتان

Hosein.Zarei
پنج شنبه 20 تیر 1387, 16:20 عصر
لطفا راهنمایی کنید!!!

razavi_university
جمعه 21 تیر 1387, 00:09 صبح
البته من کد پیچیده ای واسه اون کنترل به کار نبردم . برای هر قسمتش کامنت گذاشتم تا واسه بقیه راهنما باشه
به هر حال سعی می کنم تغییراتی که لازم دارید رو در اون انجام بدم و نسخه جدیدش رو همینجا قرار می دم

این پست با نسخه جدید کنترل جایگزین می شود

Hosein.Zarei
دوشنبه 24 تیر 1387, 21:51 عصر
برای اضافه کردن اعشار فقط به جای
value = d.ToString("#,#"); این را بنویسید:

value = d.ToString("#,#.#");

maryam_f
سه شنبه 08 مرداد 1387, 14:41 عصر
میشه بگین این کار برای Web application چه جوری انجام میشه؟ ممنون میشم.

maryam_f
چهارشنبه 09 مرداد 1387, 18:40 عصر
كسي نمي دونه تو Web application چه جوري مي شه اينكار رو كرد؟؟؟ خواهشا يكي جواب بده. تاپيك جديد كه نمي ذارن بنويسم!!!

egoldashraf
چهارشنبه 09 مرداد 1387, 19:10 عصر
http://barnamenevis.org/forum/showthread.php?t=74363

ali_fast
یک شنبه 13 مرداد 1387, 18:50 عصر
با سلام
دوست عزیر اول باید ازتون تشکر کنم بابت این کار جالب ومفید یک پیشنهاد دارم که اگر توی این کار این رو اجرا کنی بسیار جالب میشه کامای بین اعدادو در زمان وارد کردن عدد بزاره خیلی جالب میشه من این کارو کردم و دارم ازش استفاده میکنم بد نیست

hana2064
پنج شنبه 04 مهر 1387, 10:04 صبح
با سلام
من دو بار برنامه رو د انلود کردم ولی نتونستم استفاده کردم ممنون اگه بگین چه جوری باید استفاده کنیم
من به برنامه یه فرم اضافه کردم و این کنترل رو از toolboxبهش اضافه کردم ولی error میده . نمی دونم روش کارش چیه ؟؟ م منون
argument exception was unhandled
کد

Assembly 'C:\Documents and Settings\salam\Desktop\28sh\New Folder\Money TextBoxhh\Money TextBox\obj\Release\Money TextBox.dll' doesn't contain any UserControl types.

manibaharlou
پنج شنبه 04 مهر 1387, 19:03 عصر
سلام من اين كد رو استفاده كردم و جواب داد ولي اين سه رقم شدن فقط در textbox اتفاق ميافته و در ديتاگريد ويو دوباره به شكل اول برميگرده بايد چكار كرد؟

razavi_university
جمعه 05 مهر 1387, 19:50 عصر
خوب این کنترل فقط 3تایی نمایش میده برای اینکه DataGrid درست نمایش بده باید حالت نمایش اون Column از DataGrid رو تغییر بدین
جستجو کنین قبلا بحث شده

hana2064
شنبه 06 مهر 1387, 10:06 صبح
لطفا یکی بگه چه جوری باید ازش استفاده کرد من خیلی بهش احتیاج دارم تویه فرم اونو میارم ولی error میده .
یکی جوااااااااااب بده لطفا

razavi_university
شنبه 06 مهر 1387, 14:26 عصر
dll تست شد و مشکلی نداشت
از کدوم نسخه اش استفاده میکنید بهتره اونی که در تاپیک نمونه برنامه ها (http://barnamenevis.org/forum/showpost.php?p=487967&postcount=63) است رو استفاده بکنین

kh1387
یک شنبه 07 مهر 1387, 01:03 صبح
سلام

جوابتون عالی بود من ابتدا اشتباهاً در رویداد click برنامه را نوشتم ولی بعد با جابجایی قطعه برنامه در رویداد text-change به جواب رسیدم.

فقط یه سوال و اون اینکه منظور از "N" چیست؟


میشه بگید چطوری در رویداد text-change به جواب رسیدید؟
آخه چطوری؟:متفکر:

rostamkhani
یک شنبه 07 مهر 1387, 02:23 صبح
سلام
این تاپیک که لینک هست بعد از این تاپیک زده شده ولی چون بحث اتوماتیک این موضوع اونجا مطرح شده بود بنده کد رو توی اون تاپیک گزاشتم کداول یه مشکل کوچیکی داره ولی کد دوم مشکل حل شده
http://barnamenevis.org/forum/showthread.php?p=604244#post604244

hana2064
یک شنبه 07 مهر 1387, 10:32 صبح
من ازفایلی که تو نمونه برنامه ها قرار د ادید استفاده می کنم ولی همون error رو می ده
لطفا فقط بگید که چه جوری باید ازش استفاده کنم


Assembly 'C:\Documents and Settings\salam\Desktop\7mehr\Money TextBox\Money TextBox\obj\Release\Money TextBox.dll' doesn't contain any UserControl types.

razavi_university
دوشنبه 08 مهر 1387, 02:21 صبح
از DLLی که در فولدر زیر است استفاده کنید.
Money TextBox\bin\Release\Money TextBox.dll

jaza_sa
دوشنبه 08 مهر 1387, 03:44 صبح
http://barnamenevis.org/forum/showthread.php?t=124791

hana2064
چهارشنبه 17 مهر 1387, 10:52 صبح
با سلام علاوه بر textboxی که سه رقم سه رقم اعدادو جداو میکنه آیا می شه که برای وارد کردن عدد 120000 ما فقط عدد 120رو وارد کنیم وسه تا صفر رو خودش اضافه کنه یعنی عدد رو با فرمت هزارریال وارد کنه. البته با تعریف فیلد قیمت به شکل decimal(18,3) سه تا صفر تو بانک ا ضافه میشه ولی تو textbox وارد نمیشه امیدوارم منظورمو درست گفته باشم

razavi_university
چهارشنبه 17 مهر 1387, 15:42 عصر
بله این امکان را به راحتی با تغییر سورس می توان قرار داد
3صفری که فرمودین بعد از ممیز اضافه می شوند و ارزش عددی ندارند

sasanazizi
چهارشنبه 17 مهر 1387, 18:30 عصر
این هم یک نمونه اش

nathan
پنج شنبه 18 مهر 1387, 10:15 صبح
اين كدروامتحان كنيد:


int s = 1237;
Console.WriteLine(s.ToString("0,0"));
//1,237

nathan
پنج شنبه 18 مهر 1387, 10:16 صبح
يابه اين صورت:


int s = 1237;
Console.WriteLine(s.ToString("#,#"));
//1,237

nathan
پنج شنبه 18 مهر 1387, 10:19 صبح
البته هردوي اينها يك مثال عام هستند!دوستان گرامي كافي است به هرنوع داده عددي كه نيازدارند اين حالت راتعميم دهند.

razavi_university
پنج شنبه 18 مهر 1387, 12:19 عصر
این هم یک نمونه اش


اين كدروامتحان كنيد:


int s = 1237;
Console.WriteLine(s.ToString("0,0"));
//1,237



يابه اين صورت:


int s = 1237;
Console.WriteLine(s.ToString("#,#"));
//1,237



البته هردوي اينها يك مثال عام هستند!دوستان گرامي كافي است به هرنوع داده عددي كه نيازدارند اين حالت راتعميم دهند.

با تشکر از تمامی دوستان
اگر دقت کنید روشهایی که فرمودین یا ضمیمه کردین در نسخه های اولیه MoneyTextBox استفاده شده.
مثلا استفاده از حالت


ToString("C");
یا


ToString("#,#")
به دلایل مشکلاتی که این روشها داشتند کنار گذاشته شدند به عنوان مثال استفاده از C برای چاپ ریال باعث قرار دادن آن سمت چپ می شود و یا استفاده از "#,#" به دلیل ایجاد مشکل برای حالت ممیز
روشهایی که اکثرا در MSDN یا سایتهای غیر فارسی زبان دیگر گفته می شود برای زبان و اعداد انگلیسی به خوبی کار می کند (چون اعداد و حروف از چپ نوشته می شوند) ولی برای زبانهایی مانند فارسی که مشکل راست به چپ کماکان در ویندوز نسبتا وجود دارد این روشها کارساز نیست (و یا می خواهیم ریال در سمت راست اضافه شود)

برای توسعه سریعتر و بهتر برای رسیدن به یک کنترل مناسب جهت استفاده در برنامه ها لطفا آخرین مثال (http://barnamenevis.org/forum/showpost.php?p=606997&postcount=11) را توسعه دهید

http://i34.tinypic.com/103ftoy.jpg (http://barnamenevis.org/forum/showpost.php?p=606997&postcount=11)

taha mahdi
جمعه 25 بهمن 1387, 11:11 صبح
با سلام خدمت دوستان و تشکر

بچه ها ببینید کاری که کرده ام درسته من اول به پروژخ اصلی یک کلاس اضافه می کنم بعد با کپی کردن کلاس این تکس باکس و تغیر فضای نام و این کارها بعد کامپوننتی که در toolbox قرار گرفته را روی فرم می کشم و از آن استفاده می کنم

اما مشکل
حالا که می خواهم اطلاعات را به drideview وارد کنم برنامه قفل می شه اما در database اطلاعاتم ذخیره شده

چه کارکنم که این مشکل به وجود نیاد

h.jaza
جمعه 25 بهمن 1387, 16:10 عصر
... قفل می شه ...
یعنی چی قفل میشه؟؟؟

دیباگ کنید ببینید مشکل از کجاس...

linux
شنبه 26 بهمن 1387, 02:14 صبح
با تشکر از تمامی دوستان
اگر دقت کنید روشهایی که فرمودین یا ضمیمه کردین در نسخه های اولیه MoneyTextBox استفاده شده.
مثلا استفاده از حالت


ToString("C");
یا


ToString("#,#")
به دلایل مشکلاتی که این روشها داشتند کنار گذاشته شدند به عنوان مثال استفاده از C برای چاپ ریال باعث قرار دادن آن سمت چپ می شود و یا استفاده از "#,#" به دلیل ایجاد مشکل برای حالت ممیز
روشهایی که اکثرا در MSDN یا سایتهای غیر فارسی زبان دیگر گفته می شود برای زبان و اعداد انگلیسی به خوبی کار می کند (چون اعداد و حروف از چپ نوشته می شوند) ولی برای زبانهایی مانند فارسی که مشکل راست به چپ کماکان در ویندوز نسبتا وجود دارد این روشها کارساز نیست (و یا می خواهیم ریال در سمت راست اضافه شود)

برای توسعه سریعتر و بهتر برای رسیدن به یک کنترل مناسب جهت استفاده در برنامه ها لطفا آخرین مثال (http://barnamenevis.org/forum/showpost.php?p=606997&postcount=11) را توسعه دهید

http://i34.tinypic.com/103ftoy.jpg (http://barnamenevis.org/forum/showpost.php?p=606997&postcount=11)

روشهایی دیگران گفتند استفاده از C و ... درست هست ، شما با تغییر در numberformatinfo همه اینها را می توانید کنترل کنید.

taha mahdi
شنبه 26 بهمن 1387, 11:40 صبح
یعنی چی قفل میشه؟؟؟

مطنئن هستم که برنامه هیچ مشکل خاصی نداره
تنها زمانی که از این کلاس استفاده می کنم و برنامه را اجرا می کنم فرم ثابت می ماند و با یک کلیک به حالت not responding می رود ولی تغییرات در پایگاه اعمال می شود

Masoome_das
پنج شنبه 07 مرداد 1389, 11:58 صبح
سلام


برای توسعه سریعتر و بهتر برای رسیدن به یک کنترل مناسب جهت استفاده در برنامه ها لطفا آخرین مثال (http://barnamenevis.org/forum/showpost.php?p=606997&postcount=11) را توسعه دهید


من می خواستم از این کنترل استفاده کنم و در هنگامی که فوکوس روی آن قرار می گیرد رنگ زمینه Texbox تغییر کنه ولی این اتفاق نمی افته یعنی وقتی من در ایونت Enter می خوام رنگ زمینه را عوض کنه عمل نمی کنه .

mostafah110
پنج شنبه 07 مرداد 1389, 12:13 عصر
من این تابع را نوشتم:

//convert a number in to money format.
public static string numberToMoney(string input)
{
input = moneyToNumber(input);
string outputT = "";
string output = "";
int j=0;
for(int i = input.Length-1;i>=0;i--)
{
outputT += input[i];
if (j % 3 == 2 && j < input.Length - 1)
{
outputT += ",";
}
j++;
}
for(int i=outputT.Length-1;i>=0;i--)
{
output += outputT[i];
}
return output;
}

//convert a money format to number
public static string moneyToNumber(string input)
{
string output = "";
for (int i = 0; i < input.Length; i++)
{
if (input[i] != ',')
output += input[i];
}
return output;
}

rezakhafan4u
جمعه 21 مرداد 1390, 18:20 عصر
من این تابع را نوشتم:

//convert a number in to money format.
public static string numberToMoney(string input)
{
input = moneyToNumber(input);
string outputT = "";
string output = "";
int j=0;
for(int i = input.Length-1;i>=0;i--)
{
outputT += input[i];
if (j % 3 == 2 && j < input.Length - 1)
{
outputT += ",";
}
j++;
}
for(int i=outputT.Length-1;i>=0;i--)
{
output += outputT[i];
}
return output;
}

//convert a money format to number
public static string moneyToNumber(string input)
{
string output = "";
for (int i = 0; i < input.Length; i++)
{
if (input[i] != ',')
output += input[i];
}
return output;
}

آقا من با این برنامه شما خیلی حال کردم :خجالت:
ازش دوتا سوال دارم
یکی اینکه اون قسمت J%3 == 2 رو برام یک توضیح میدی ؟
دوم اینکه اگه بخوایم با یک فاصله کنار عدد بنویسه "ریال" و تو تابع بعدی که می خواد اونو به عدد معمولی تبدیل کنه بتونه اونو حذف کنه، کد رو به نظرت چجوری تغییر بدیم بهتره؟

با تشکر

rezakhafan4u
شنبه 22 مرداد 1390, 10:47 صبح
اینم بد نیست منتها نتونستم به تابع تبدیلش کنم.ممنون میشم اینم ارتقا به تابع بدید

if

(!(string.IsNullOrEmpty(this.G_JAV_MB.Text)))

{


String S = T_PRICE.Text.Replace(",", "");

T_PRICE.Text = (
Convert.ToInt64(S)).ToString("#,#");

T_PRICE.SelectionStart = T_PRICE.Text.Length;

T_PRICE.Focus();

}



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

parsester
شنبه 16 مهر 1390, 09:15 صبح
حال اگر بخواهیم متن تکستباکسی که سه رقم سه رقم جدا شده رو بدون سپراتورها در دیتابیس ذخیره کنیم (نوع فیلد در دیتابیس bigint) چکار باید بکنم؟
من این کار رو با کد زیر انجام دادم اما نمیشه

textbox1.text.trim(',')

mmd2009
شنبه 16 مهر 1390, 09:31 صبح
http://barnamenevis.org/showthread.php?305710-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%A7%D8%B1%D9%82%D8%A7%D9%85-%28%D9%85%D8%A8%D9%84%D8%BA%29-%D8%AF%D8%B1-%D8%AA%DA%A9%D8%B3%D8%AA-%D8%A8%D8%A7%DA%A9%D8%B3-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B7%D9%88%D8%B1%DB%8C-%DA%A9%D9%87-%D8%B3%D9%87-%D8%B1%D9%82%D9%85-%D8%B3%D9%87-%D8%B1%D9%82%D9%85-%D8%AC%D8%AF%D8%A7-%D8%A8%D8%A7%D8%B4%D8%AF

mostafah110
دوشنبه 21 فروردین 1391, 20:55 عصر
یه سری تغییرات تو این تابع دادم که میزارمشون!

//convert a number in to money format.
public static string numberToMoney(string input, bool rightToLeft = true)
{
input = moneyToNumber(input);
double inp_int = Convert.ToDouble(input);
bool containDot = false;
if (inp_int < 0)
{
input = input.Remove(0, 1);
}
string[] s = { "", "" };
if (input.Contains('.'))
{
s = input.Split('.');
input = s[0];
containDot = true;
}
string outputT = "";
string output = "";
int j = 0;
for (int i = input.Length - 1; i >= 0; i--)
{
outputT += input[i];
if (j % 3 == 2 && j < input.Length - 1)
{
outputT += ",";
}
j++;
}
for (int i = outputT.Length - 1; i >= 0; i--)
{
output += outputT[i];
}
if (containDot)
output += "." + s[1];
if (inp_int < 0)
{
if (rightToLeft)
output = output.Insert(output.Length, "-");
else
output = output.Insert(0, "-");
}
return output;
}

//convert a money format to number
public static string moneyToNumber(string input)
{
if (input == "")
input = "0";
string output = "";
for (int i = 0; i < input.Length; i++)
{
if (input[i] != ',')
output += input[i];
if (input[i] == ' ')
break;
}
return output;
}

aminaltavista
سه شنبه 04 مهر 1391, 09:32 صبح
سلام

اما یه مشکل اساسی دیگه ای هم داره!

آنتی ویروس من اونو ویروس میشناسه! یا سیستمتون ویروسی هست یا خودتون ویروس نوشتید. شاید نه باید !
اما جسارتم رو ببخشید . بعد از دانلود موقع اجرا حذف شد . احتمالا موقع نصب هم همین بلا سرش میاد.

sagggad
جمعه 22 آذر 1392, 14:55 عصر
ازتوابع Mid و Len استفاده کن.(آسون ترین راه!!)

saman_hm
چهارشنبه 05 شهریور 1393, 13:50 عصر
decimal a = Convert.ToDecimal (x);
price = a.ToString("#,##0");
مقدار X عدد شما به صورت String میباشد . به همین سادگی

sab2020
چهارشنبه 15 بهمن 1393, 08:56 صبح
سلام دوستان
در اولین پست کدی قرار داده شد ، ولی نمیتونم اجرا کنم

if (char.IsLetter(e.KeyChar))
e.Handled = true;
زیر KeyChar خط کشیده .
چکار باید کرد ؟

qartallar
دوشنبه 20 بهمن 1393, 19:08 عصر
این کد رو درون text changed بنویس واقعا عالی کار میکنه




private void txt1_TextChanged(object sender, EventArgs e)
{
decimal Number;
if (decimal.TryParse(txt1.Text, out Number))
{
txt1.Text = string.Format("{0:N0}", Number);
txt1.SelectionStart = txt1.Text.Length;
}

}

qartallar
دوشنبه 20 بهمن 1393, 19:30 عصر
دوست عزیز این کد رو باید تو رویداد key press بنویسی

qartallar
دوشنبه 20 بهمن 1393, 19:32 عصر
سلام دوستان
در اولین پست کدی قرار داده شد ، ولی نمیتونم اجرا کنم

if (char.IsLetter(e.KeyChar))
e.Handled = true;
زیر KeyChar خط کشیده .
چکار باید کرد ؟

دوست عزیز این کد رو باید تو رویداد key press بنویسی

mostafah110
دوشنبه 20 بهمن 1393, 21:46 عصر
آقا من با این برنامه شما خیلی حال کردم :خجالت:
ازش دوتا سوال دارم
یکی اینکه اون قسمت J%3 == 2 رو برام یک توضیح میدی ؟
دوم اینکه اگه بخوایم با یک فاصله کنار عدد بنویسه "ریال" و تو تابع بعدی که می خواد اونو به عدد معمولی تبدیل کنه بتونه اونو حذف کنه، کد رو به نظرت چجوری تغییر بدیم بهتره؟

با تشکر
اولا خیلی معذرت که اینقدر دیر جواب دادم :خجالت:
خب قراره ۳ تا ۳ تا جدا کنیم j%3 هم باقیمانده J بر ۳ رو بهمون میده ... اونجاهایی که باقیمانده صفر هستن پس یک کاما میزاریم.
خب برای حذف ریال هم از دستور replace استفاده کن. این شکلی:



input.replace(" ریال", "");

سید جعفر
یک شنبه 24 خرداد 1394, 12:12 عصر
سلام یه سوال دارم
چطوری میتونم که نوعیت پولی رو زمانی که تو تکس باکس نوشتم و ارقام ذخیره شد تو دتابس نوعیت پولی مشخص بشه مثلا من از چند تا نوعیت پولی استفاده میکنم مثلا دلار ؛ تومان ؛ یورو ؛ و افعانی . حالا میخوام وقتی ارقامم رو وارد کردم وقتی ذخیره میشه داخل دتابس نوعیت پولی هم ذخیره بشه مثلا من وارد میکنم تو حساب دلاری خودم 89000 هشتادو نه هزار دالار این تو دتابس اینجوری بیاد $89,000 علامت دلار هم آخرش بیاد و تو محاسبات هم این علامت محاسبات رو بهم نزنه .
تشکر