PDA

View Full Version : فارسی کردن اعداد در textbox



bpzone
شنبه 27 مرداد 1386, 01:46 صبح
سلام به همگی
من با استفاده از کدی که از توی مطالب قبلی پیدا کردم ، فرمم رو فارسی کردم ، اما هنوز اعداد رو انگلیسی نشون میده ، واسه اعداد باید چیکار کنم ؟؟

iranrose63
شنبه 27 مرداد 1386, 06:48 صبح
خاصیت RightToLeft مربوط به TextBox را true کردی

bpzone
شنبه 27 مرداد 1386, 09:41 صبح
خاصیت RightToLeft مربوط به TextBox را true کردی

این کار رو انجام دادم ، هیچ تاثیری نداشت :ناراحت:

once4ever
شنبه 27 مرداد 1386, 10:08 صبح
1. زبان پیش فرض ویندوز رو فارسی کنی (جالب نیست)
2. از فونتهایی که اعداد فارسی دارند استفاده کنی
3. همین

mnordesigner
شنبه 27 مرداد 1386, 10:08 صبح
باید در کنترل پنل در قسمت Reginal and language option, روک دکمه Customize کلید کنی سپس قسمت Digit substituation رو به Natioinal تغییر بدی

__H2__
یک شنبه 28 مرداد 1386, 09:31 صبح
سلام
تلفیق کاری که کاربر iranrose63 (http://barnamenevis.org/forum/member.php?u=21126) و once4ever (http://barnamenevis.org/forum/member.php?u=8564) گفتند بدن شک مشکل را حل میکند!
یعنی هم RightToLeft کنید و هم فونت را از فونتهای خام فارسی انتخاب کنید، مثلاً Homa یا Titr و یا ... (یادتان نرود در زمان انتقال و یا تحویل برنامه در فرآیند setup احتمالی فونت مورد نظر را هم نصب کنید.)

leilav_1984
یک شنبه 28 مرداد 1386, 10:06 صبح
اگه توی Setting پروژه Localization اونو فارسی کنید تمام Textboxها و Comboboxها و ...حتی MessageBoxها کاملا فارسی میشن

PC2st
یک شنبه 28 مرداد 1386, 11:13 صبح
یک خبر خوب :-) کدش رو پیدا کردم!!!!!!!
یک TextBox با اعداد فارسی داشته باشید بدون کوچکترین تغییری در سیستم عامل و حتی نوع فونت!

نه تنظیمات سیستم رو میخواد دستکاری کنید نه فونت رو عوض کنید!
فقط یک خط کوچولو به برنامتون اضافه کنید...

در رویداد KeyPress کافیه که unicode اعداد انگلیسی رو به unicode اعداد فارسی تبدیل کنیم!

امیدوارم دوستانی که احتیاج داشتند، حالش رو ببرند :-)


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar >= 48 && (int)e.KeyChar < 58)
e.KeyChar = (char)(1632 + int.Parse(e.KeyChar.ToString()));
}

hdv212
یک شنبه 28 مرداد 1386, 12:10 عصر
اگه توی Setting پروژه Localization اونو فارسی کنید تمام Textboxها و Comboboxها و ...حتی MessageBoxها کاملا فارسی میشن

این Localization کجاست ؟ من پیداش نکردم.

once4ever
یک شنبه 28 مرداد 1386, 14:21 عصر
یک خبر خوب :-) کدش رو پیدا کردم!!!!!!!
یک TextBox با اعداد فارسی داشته باشید بدون کوچکترین تغییری در سیستم عامل و حتی نوع فونت!

نه تنظیمات سیستم رو میخواد دستکاری کنید نه فونت رو عوض کنید!
فقط یک خط کوچولو به برنامتون اضافه کنید...

در رویداد KeyPress کافیه که unicode اعداد انگلیسی رو به unicode اعداد فارسی تبدیل کنیم!

امیدوارم دوستانی که احتیاج داشتند، حالش رو ببرند :-)
کد:
زیاد خوشحال نباش
این مورد برای خیلی وقت پیش اما به دلیل یک مشکل بزرگی که داره (و قبلا هم تو همین فروم نوشتم) کاربرد نمیتونه داشته باشه ( مگه اینکه یکار دیگه هم بهش اضافه کنی) ;)

PC2st
یک شنبه 28 مرداد 1386, 14:52 عصر
زیاد خوشحال نباش
این مورد برای خیلی وقت پیش اما به دلیل یک مشکل بزرگی که داره
از توضیحات خوبتون ممنونم. :-) :موفق:

چون گفتید که قبلا بحث شده، جستجو زدم و بالاخره پست زیر رو تونستم پیدا کردم:
http://barnamenevis.org/forum/showthread.php?t=53125

اگر منظورتون همون پست باشه، در اونجا یک دوستی کدی مثل کدهای من نوشته بود، با این تفاوت که Unicode عدد صفر رو از 1776 شروع کرده بود!! با کمال تعجب اینکه، کد ایشون روی سیستم من هم جواب داد!!!

ولی متاسفانه نفهمیدم این روش چه مشکلی داره؟ ممنون میشم کمی بیشتر توضیح بدید!؟

once4ever
یک شنبه 28 مرداد 1386, 15:00 عصر
ولی متاسفانه نفهمیدم این روش چه مشکلی داره؟ ممنون میشم کمی بیشتر توضیح بدید!؟
پشت کار خوبی دارید ;)
تو همون تاپیک صفحه دوم نگاه کنی نوشتم.
http://barnamenevis.org/forum/showpost.php?p=309953&postcount=12
کلا به دردسری که ایجاد میکنه نمیرزه ;) درحالیکه با یک فونت خاص (و ساده) میتونی فارسی داشته باشی بدون هیچ عملیات تبدیل.
امیدوارم نتیجه مثبت گرفته باشیم
ممنون

sm_ezadpanah
یک شنبه 28 مرداد 1386, 15:24 عصر
با سلام
من که آخر نفهمیدم مشکل این کدی رو که دوستمون گذاشته چیه . ضمنا اون Localization رو هم پیدا نکردم کجاست . موفق باشید

PC2st
یک شنبه 28 مرداد 1386, 15:29 عصر
در اونجا یک دوستی کدی مثل کدهای من نوشته بود، با این تفاوت که Unicode عدد صفر رو از 1776 شروع کرده بود!! با کمال تعجب اینکه، کد ایشون روی سیستم من هم جواب داد!!!
فهمیدم چرا اینطور شده، چون دو نوع unicode برای اعداد فارسی وجود داره.
unicode اعدادی که کد آنها از 1632 شروع شده، بعنوان Arabic Indic-Digit تلقی میشوند.
و unicode اعدادی که کد آنها از 1776 شروع شده، بعنوان Extended Arabic Indic-Digit تلقی میشوند.

و جالب اینکه، اگر فونت TextBox را روی Tahoma تنظیم کنیم، در اینصورت Style اعدادی که کد آنها از 1632 شروع شده با Style اعدادی که کد آنها از 1776 شروع میشود، فرق میکنه!
مثلا ٤ و ۴ که هر دو چهار هستند، ولی شکل ظاهری و Style آنها با هم فرق میکند.
راستی یک چیزی، شما اون دو عدد 4 رو بصورت فارسی خوندید. :بامزه:




1. عددی که با یونیکد نوشته بشه به عنوان یک رقم نمیتونه باشه
خوب به کمک متد زیر، میشه اونها رو دوباره به رشته ای تبدیل کرد تا به راحتی اون رشته رو به عدد تبدیل کنیم!


private string GetNumber()
{
string output="";
foreach (char ch in textBox1.Text.ToCharArray())
if ((int)ch >= 1632 && (int)ch < 1642)
output += ((int)((int)ch - 1632)).ToString();
return output;
}

البته من متد فوق رو خیلی حول حولکی نوشتم، ممکنه بشه از این Optimize تر هم نوشت.

PC2st
یک شنبه 28 مرداد 1386, 15:35 عصر
فکر کنم منظورش از Localization همون Localizable از خاصیت فرم باشه...



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

فکر نمیکنم مشکل بخصوصی داشته باشه.




درحالیکه با یک فونت خاص (و ساده) میتونی فارسی داشته باشی بدون هیچ عملیات تبدیل.
بله، درسته اگر فونت رو روی سیستم نصب نکنیم و در resource برنامه خودمون ذخیره بشه، فکر خوبیه. (فقط یک فونت مناسب هم باید داشت)

bpzone
دوشنبه 29 مرداد 1386, 00:23 صبح
ممنون از همگی ...

hdv212
دوشنبه 29 مرداد 1386, 02:11 صبح
این Localization بالاخره چی شد ؟ من خاصیت Localizable فرم رو برابر با true کردم و از لیست Languages، گزینه ی persian رو انتخاب کردم، ولی نشد. مشکل کجاست ؟

leilav_1984
سه شنبه 30 مرداد 1386, 09:55 صبح
الان VB دمه دستمه خودتون به C# تبدیل کنید

'تنظیم زبان برنامه به فارسی
Dim myculture As New Globalization.CultureInfo("fa-ir")
Dim mylanguage As InputLanguage
InputLanguage.CurrentInputLanguage = mylanguage.FromCulture(myculture)

PC2st
سه شنبه 30 مرداد 1386, 10:53 صبح
این کد زبان سیستم رو به فارسی تغییر میده، اعداد فارسی نمیشوند.

tohfeSigmaTec
سه شنبه 30 مرداد 1386, 11:34 صبح
این کار خوبه ولی فکر کردی اگه یکی توی اون textbox متنی رو Paste بکنه می خوای چی کار کنی پس این تا یه حدی بدرد می خوره
باید اینو توی TextChange بگذاری و توی اون تکتک کاراکتر ها رو چک کنی

PC2st
سه شنبه 30 مرداد 1386, 12:58 عصر
این کار خوبه ولی فکر کردی اگه یکی توی اون textbox متنی رو Paste بکنه می خوای چی کار کنی پس این تا یه حدی بدرد می خوره
باید اینو توی TextChange بگذاری و توی اون تکتک کاراکتر ها رو چک کنی
برای پیاده سازی یک چنین TextBox ای به چندین و چند روش میشه عمل کرد، از این لحاظ کاملا موافقم که هر چیزی تا حدی به درد میخوره و همه چیز 100% که Useful نیست :لبخند:
برای اینکه وقتی کاربر خواست کپی و Paste کنه، مثلا:


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar))
e.KeyChar = (char)(1632 + int.Parse(e.KeyChar.ToString()));
else if ((int)e.KeyChar == 22)
{
string txt = Clipboard.GetText();
if (txt != "")
Clipboard.SetText(ToPersianNumbers(txt), TextDataFormat.UnicodeText);
}
}

private string ToPersianNumbers(string text)
{
string output = "";
foreach (char ch in text.ToCharArray())
if (char.IsDigit(ch))
output += (char)(int.Parse(ch.ToString()) + 1632);
else
output += ch.ToString();
return output;
}

کد فوق هم از عاری از ضرر نیست، چون:
- کاربر با کلیک راست میتونه عملیات کپی و Paste اش رو انجام بده بدون اینکه برنامه ما متوجه بشه!
- Clipboard دستکاری میشه، و اعداد داخل کلیپ بورد فارسی میشه.
ولی بازهم میشه کاری کرد که احتیاجی به تغییرات در Clipboard نباشه (باید از رویداد های دیگه کمک گرفت)، حالا ممکنه بگید خوب این چه کاریه :لبخند: از رویداد TextChanged استفاده میکردی و این دردسرها هم نداشتی؟ ولی اگر بخوایم عمل تبدیل رو در رویداد TextChanged بنویسیم، هر چه متنی که کاربر وارد میکنه بیشتر باشه، عمل تبدیلات هم بیشتر میشه چون باید تک تک کاراکترهاش رو از اول تا آخر چک کرد، اما باز هم میشه کاری کرد که تبدیلات از اول صورت نگیره مثلا استفاده از متغیر کمکی و غیره. همه چیز بستگی به روش پیاده سازی داره.

leilav_1984
چهارشنبه 31 مرداد 1386, 09:39 صبح
این کد زبان سیستم رو به فارسی تغییر میده، اعداد فارسی نمیشوند.

امتحان کنید بعد جواب بدید
اعداد هم فارسی میشن

safura
چهارشنبه 31 مرداد 1386, 10:38 صبح
امتحان کنید بعد جواب بدید
اعداد هم فارسی میشن

من هم امتحان کردم و فقط حروف فارسی شدند و اعداد همچنان انگلیسیند!

PC2st
چهارشنبه 31 مرداد 1386, 11:19 صبح
امتحان کنید بعد جواب بدید
اعداد هم فارسی میشن
امتحان کردم و جواب دادم :لبخند:
به احتمال زیاد به این دلیل اعدادش برای من فارسی نمیشه، چون زبان فارسی در سیستم من بعنوان زبان اول انتخاب نشده.
کد زیر رو در Load از From نوشتم (همون کد خودتون هست به زبان سی شارپ):


InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));

hdv212
چهارشنبه 31 مرداد 1386, 14:46 عصر
'تنظیم زبان برنامه به فارسی
Dim myculture As New Globalization.CultureInfo("fa-ir")
Dim mylanguage As InputLanguage
InputLanguage.CurrentInputLanguage = mylanguage.FromCulture(myculture)
این کد بالایی اصلا کار نمیکنه، آبجکت mylanguage اصلا متدی به نام FromCulture نداره! (خط آخر).
کد PC2st.ir هم مشکل منو حل نکرد، هنوز انگلیسی مینویسه.

federrer
چهارشنبه 31 مرداد 1386, 14:48 عصر
شما در نظر بگیر خواستیم پروژه رو در سیستمی که اصلا زبان فارسی کیبوردش نصب نشده اجرا کنیم ، اونوقت چی ؟

یه روشی که احتیاج به نصب فونت یا نصب زبان فارسی برای کیبورد نباشه ارائه بدید عالیه !

یه تابع تبدیل با کمترین مشکل
:لبخند:

PC2st
چهارشنبه 31 مرداد 1386, 14:59 عصر
کد PC2st.ir هم مشکل منو حل نکرد، هنوز انگلیسی مینویسه.
کدوم کد؟ کد تغییر زبان فارسی یا کد تبدیل اعداد انگلیسی به اعداد فارسی؟




شما در نظر بگیر خواستیم پروژه رو در سیستمی که اصلا زبان فارسی کیبوردش نصب نشده اجرا کنیم ، اونوقت چی ؟

یه روشی که احتیاج به نصب فونت یا نصب زبان فارسی برای کیبورد نباشه ارائه بدید عالیه !
اونوقت دیگه هیچی، کاربر باید فینگلیش تایپ کنه !
شاید هم بشه؟ خدا رو چه دیدید؟!؟

safura
چهارشنبه 31 مرداد 1386, 15:00 عصر
شما این کد رو امتحان کنین، جواب می ده:
Dim Eng AsNew Globalization.CultureInfo("fa-ir")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(Eng)

hdv212
چهارشنبه 31 مرداد 1386, 23:10 عصر
شما این کد رو امتحان کنین، جواب می ده:
Dim Eng AsNew Globalization.CultureInfo("fa-ir")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(Eng)
این یکی هم اعداد رو فارسی نمیکنه.


کدوم کد؟ کد تغییر زبان فارسی یا کد تبدیل اعداد انگلیسی به اعداد فارسی؟
پست شماره ی 24، اعداد رو فارسی نکرد.

leilav_1984
شنبه 03 شهریور 1386, 15:09 عصر
شما این کد رو امتحان کنین، جواب می ده:
Dim Eng AsNew Globalization.CultureInfo("fa-ir")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(Eng)


این که مثله کدیه که من دادم و حضرتعالی نقضش کردین

hdv212
شنبه 03 شهریور 1386, 15:29 عصر
سه صفحه از این تاپیک پر شد ولی هنوز نتیجه نگرفتیم، موضوع اصلی فقط فارسی نویسی اهدا بود نه تغییر زبان، کدهای بالا هم هیچ کدوم اعداد رو فارسی نکردن (البته تا اونجایی که من تست کردم)، لطفا اگه کسی کدی رو تست کرده که اعداد رو فارسی مینویسه بذاره اینجا ما هم یه تستی بزنیم.

safura
سه شنبه 13 شهریور 1386, 07:10 صبح
این که مثله کدیه که من دادم و حضرتعالی نقضش کردین
درسته این کد هم اعداد رو فارسی نمی کنه، در واقع همون کد شماست اما خطا می داد من اینجوری نوشتم.

bpzone
چهارشنبه 21 شهریور 1386, 09:55 صبح
برای فارسی کردن اعداد در داخل textbox من این کارو کردم بالاخره جواب گرفتم

ابتدا در Event Load این کد رو نوشتم


InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));

بعدش مسیر زیر رو Set کردم Regional Language Options -- > Regional Options --> Customaize --> Numbres --> Digit Substitution --> Context

دیگه اعداد توی textbox فارسی نوشته میشن

smt_414
پنج شنبه 19 مهر 1386, 14:31 عصر
سلام
این کد زبان سیستم رو تبدیل می کنه به فارسی
معادل این کد چی میشه
یعنی فارسی رو تبدیل کنه به انگلیسی
در واقع به جای fa-ir چه باید بذاریم
با تشکر


InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));

PC2st
پنج شنبه 19 مهر 1386, 20:57 عصر
برای English - United States:


en-US

alirzn
جمعه 20 مهر 1386, 11:53 صبح
واسه فارسی بهترین فونت time new roman با right to left و size 14 یا 16 هست

hdv212
جمعه 20 مهر 1386, 12:02 عصر
برای فارسی کردن اعداد در داخل textbox من این کارو کردم بالاخره جواب گرفتم
ابتدا در Event Load این کد رو نوشتم :

InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));
بعدش مسیر زیر رو Set کردم Regional Language Options -- > Regional Options --> Customaize --> Numbres --> Digit Substitution --> Context

دیگه اعداد توی textbox فارسی نوشته میشن
دوست عزیز اینو که همه بلدن، هدف اینه که بدون تغییر تنظیمات ویندوز بتونیم اعداد رو به صورت فارسی نشون بدیم. اینطوری کل اعداد سیستم .. چه تو برنامه ی ما و چه خارج از برنامه ی ما به صورت فارسی نشون داده میشه که جالب نیست.

hdv212
دوشنبه 02 اردیبهشت 1387, 00:36 صبح
با سلام
در مورد فارسی کردن اعداد، توی تاپیکها هرچی گشتم، نتیجه ای نگرفتم، این تاپیک هم مال چند ماه پیشه که بی نتیجه موند، منم نخواستم تاپیک جدیدی بزنم، سعی کردم همین تاپیک رو ادامه بدم که به یه نتیجه ای برسه.
مشکل بردن کد اسکی اعداد به کد دیگه برای ذخیره در دیتابیس، مشکل ما رو حل نمیکنه، مثلا کدهایی که توی تاپیک های مختلف برای تبدیل اعداد به فارسی مطرح شده بود، مثل این :

private string ToPersianNumbers(string text)
{
string output = "";
foreach (char ch in text.ToCharArray())
if (char.IsDigit(ch))
output += (char)(int.Parse(ch.ToString()) + 1584);
else
output += ch.ToString();
return output;
}
و این :

public string FarsiInt(object EnInt)
{
string A = EnInt.ToString();
string[] A2 = new string[A.Length + 1];
int i;
for (i = 0; i <= A.Length - 1; i++)
{
if (Information.IsNumeric(A.Substring(i, 1)))
{
A2[i] = Strings.ChrW(Strings.AscW(A.Substring(i, 1)) + 1728).ToString();
}
else
{
A2[i] = A.Substring(i, 1);
}
}
A = "";
for (i = 0; i <= A2.Length - 1; i++)
{
A += A2[i];
}
return A;
}
در زمان Insert به دیتابیس، خطا میده، در ضمن عددهای دیگه ای که بقیه ی دوستان گفتن مثل 1534 و .... بازم مشکلی رو حل نمیکنه.
این نکته رو هم بگم که در فرمهای استاندارد خود Visual Studio، مشکل فارسی نویسی با RightToLeft کردن و Localization حل میشه ولی من از کامپوننت استفاده میکنم که ظاهرا متون یونیکد رو پشتیبانی نمیکنه (کامپوننت DevExpress)، کسی راه حل جامعی در مورد اعداد فارسی داره که تست شده باشه ؟
مرسی

همدانی
چهارشنبه 15 دی 1389, 11:59 صبح
با این کد تو WPF کامل و راحت فارسی میشه ولی تو winform نه!!!!!


var calture = new CultureInfo("fa-IR");
Thread.CurrentThread.CurrentCulture = calture;
Thread.CurrentThread.CurrentUICulture = calture;
calture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;

واقعا واسه فارسی کردن اعداد تو winform به صورت آدم واری راهی نیست؟
سپاسگزارم

همدانی
دوشنبه 11 بهمن 1389, 10:25 صبح
جواب!!!!!!!!!! نبود؟؟؟؟؟؟؟؟

pardisannet
چهارشنبه 13 اردیبهشت 1391, 19:32 عصر
در program.cs اول یوزینگها رو بنویس و بعد در main دو خط زیر رو بنویس : این باعث میشه که بتونی فارسی تایپ کنی. هم اعداد و هم حروف

using System.Globalization;
using System.Diagnostics;
////////
using System.Threading;


Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fa-IR");
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture;