PDA

View Full Version : سوال: قرارگرفتن کاراکتر تعیین شده به جای کاراکتر تایپ شده



forodo
یک شنبه 18 خرداد 1393, 17:52 عصر
سلام
چطوری می تونم مشخص کنم که مثلاً اگر کاربر 2 انگلیسی رو تایپ کرد به جای اون 2 فارسی بیاد.
روشش رو می دونم ولی نمی دونم چطوری باید کدهاش رو بنویسم.
کد اسکی ورودی مثلاً 2 انگلیسی رو می گیریم واگر برابر 50 بود می گیم به جاش می گیم عدد 1634 رو به کاراکتر تبدیل کن و توی تکس باکس قرار بده.
حالا نمی دونم توی رویداد keypress یا keydown ( فکر کنم اینه ) باید بنویسم و چطوری بگم اگر 2 بود چاپش نکن ولی 2 فارسی رو چاپ کن.
یعنی وقتی کاربر می خوام اینو بنویسه :
ali123
به جاش اینطوری بشه:
ali123 (البته 2 فارسی )

shahryari
یک شنبه 18 خرداد 1393, 18:01 عصر
در رویداد keypress بذار و کد اسکی e.keychar را مقایسه و اصلاح کن

forodo
یک شنبه 18 خرداد 1393, 18:53 عصر
می خوام وقتی مثلاً a رو وارد می کنه a توی تکست باکس چاپ نشه و به جاش ش چاپ بشه.
کد اینو می خوام.

behnam-soft
یک شنبه 18 خرداد 1393, 19:06 عصر
در رویداد KeyPress تکس باکست این کدرو بنویس :
if e.Keychar==65
}
b.Text.Remove(0, 1);
b.text+=80
{
البته این نمونه کد هست، شما با یه سرچ کوچیک در سایتها، می تونی کد اسکی حروف رو به دست بیاری و به جای اون عددی که نوشتم قرار بدی و بگی اگر برابر این بود،حرف وارد شده رو حذف کن، به جاa فلان کد(کد اسکی اون حرفی رو که می خوای) رو بذار.به همین سادگی.

یهراه دیگه هم داری اونم این که بیای کلا بگی فونت این تکس باکس برابر باشه با مثلا b Titr که دیگه هر حرفی میگیره فارسی باشه.
موفق باشی

forodo
یک شنبه 18 خرداد 1393, 19:26 عصر
در رویداد KeyPress تکس باکست این کدرو بنویس :
if e.Keychar==65
}
b.Text.Remove(0, 1);
b.text+=80
{
البته این نمونه کد هست، شما با یه سرچ کوچیک در سایتها، می تونی کد اسکی حروف رو به دست بیاری و به جای اون عددی که نوشتم قرار بدی و بگی اگر برابر این بود،حرف وارد شده رو حذف کن، به جاa فلان کد(کد اسکی اون حرفی رو که می خوای) رو بذار.به همین سادگی.

من اینطوری نوشتم:
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (e.KeyChar == 50)
{
this.Text.Remove(0, 1);
this.Text += Convert.ToChar(1634).ToString();
}
}
که به من این رو نشون میده البته وقتی 2 رو می زنم هم انگلیسی میاد و هم فارسی.
222111٢٢٢
اون 111 از اول توی تکست باکس هست.



یهراه دیگه هم داری اونم این که بیای کلا بگی فونت این تکس باکس برابر باشه با مثلا b Titr که دیگه هر حرفی میگیره فارسی باشه.
موفق باشی
یکی از دوستان به این مشکل خورده بود که نتونست به جوابی برسه.
توی این تاپیک (http://barnamenevis.org/showthread.php?448091-%D8%AD%D8%A7%D9%84%D8%A7-%DA%A9%D9%87-%D8%AA%DA%A9%D8%B3%D8%AA-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%AE%D8%A7%D8%B5%DB%8C%D8%AA-UseCompatibleTextRendering-%D9%86%D8%AF%D8%A7%D8%B1%D9%87-%D9%85%D9%86-%DA%86%DB%8C-%DA%A9%D8%A7%D8%B1-%DA%A9%D9%86%D9%85%D8%9F)

shahryari
یک شنبه 18 خرداد 1393, 19:36 عصر
اگه فقط برای فارسی کردن اعداد میخوای ، فونت TTahoma را در همین فروم جستجو و دانلود کن
اما برای مابقی کاراکترها میتونید
ابتدا یک تابع این شکلی بنویس
public string ChangeChar(char chr)
{
string s = "";
switch (Microsoft.VisualBasic.Strings.Asc(chr))
{

case 97: // a
s= "ش";
break;
case 115: // s
s = "س";
break;
//....
//...
//....
}
return s;
}
و e.keychar رو بعنوان پارامتر ورودی بهش بده

البته بجای کد اسکی ، خود کارکتر رو هم میتونی کنترل و بررسی کنی

behnam-soft
یک شنبه 18 خرداد 1393, 19:37 عصر
خب اگر جز این بود تعجب داشت، ببین تو قسمت this.Text.Remove(0, 1); شما داری میگی از خونه 0 ام به اندازه 1 کاراکتر حذف کن! در صورتی که قبلش باید بگی اول از همه مکان این عدد 2 رو پیدا کن، بعد بیا حذفش کن، بعد هم اون عددی رو که می خوای بهش اضافه کن...
باور کن سرعت سیستم به شدت کند شده وگرنه برنامه ش رو برات می نوشتم. ولی سعی کن خودت بنویسی تا بهتر یاد بگیری.

irartesh
یک شنبه 18 خرداد 1393, 19:42 عصر
از این کد استفاده کن


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 50)
{
e.Handled = true;
textBox1.Text += Convert.ToChar(1634).ToString();
textBox1.Select(textBox1.Text.Length, 0);
}
}


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

forodo
یک شنبه 18 خرداد 1393, 19:54 عصر
از این کد استفاده کن


private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 50)
{
e.Handled = true;
textBox1.Text += Convert.ToChar(1634).ToString();
textBox1.Select(textBox1.Text.Length, 0);
}
}


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

خیلی ممنون درست شد.
توی رویداد keydown با handle کار کردم ولی نشد.

forodo
یک شنبه 18 خرداد 1393, 20:05 عصر
یهراه دیگه هم داری اونم این که بیای کلا بگی فونت این تکس باکس برابر باشه با مثلا b Titr که دیگه هر حرفی میگیره فارسی باشه.
موفق باشی
اگر شما در این حالت به جواب رسیدید روشش رو به ما هم بگید.
اینطوری می شه از فونتها قشنگ استفاده کرد.
با تشکر

forodo
یک شنبه 18 خرداد 1393, 20:08 عصر
این هم برای اعداد فارسی:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
switch (Convert.ToInt32(e.KeyChar))
{
case 48: // 0
e.Handled = true;
textBox1.Text += Convert.ToChar(1632).ToString();
break;
case 49: // 1
e.Handled = true;
textBox1.Text += Convert.ToChar(1633).ToString();
break;
case 50: // 2
e.Handled = true;
textBox1.Text += Convert.ToChar(1634).ToString();
break;
case 51: // 3
e.Handled = true;
textBox1.Text += Convert.ToChar(1635).ToString();
break;
case 52: // 4
e.Handled = true;
textBox1.Text += Convert.ToChar(1636).ToString();
break;
case 53: // 5
e.Handled = true;
textBox1.Text += Convert.ToChar(1637).ToString();
break;
case 54: // 6
e.Handled = true;
textBox1.Text += Convert.ToChar(1638).ToString();
break;
case 55: // 7
e.Handled = true;
textBox1.Text += Convert.ToChar(1639).ToString();
break;
case 56: // 8
e.Handled = true;
textBox1.Text += Convert.ToChar(1640).ToString();
break;
case 57: // 9
e.Handled = true;
textBox1.Text += Convert.ToChar(1641).ToString();
break;
}
textBox1.Select(textBox1.Text.Length, 0);
}