PDA

View Full Version : تکس باکس که فقط فارسی میگیره



eyes_shut_number1
جمعه 18 آبان 1386, 18:32 عصر
اینو دیدم اینجا سوال بود پیداش نکردم نمیدونم جواب داده شد یا نه
ولی من این کارو میکنم و درستم میشه
امید وارم به کارتون بیاد




PublicSub Farsi(ByVal cl AsString)
Dim lang As System.Windows.Forms.InputLanguage
ForEach lang In System.Windows.Forms.InputLanguage.InstalledInputL anguages
If (lang.Culture.TwoLetterISOLanguageName = cl) Then
System.Windows.Forms.Application.CurrentCulture = lang.Culture
System.Windows.Forms.Application.CurrentInputLangu age = lang
EndIf
Next
EndSub
PrivateSub txtFirstName_GotFocus(ByVal sender AsObject, ByVal e As System.EventArgs) Handles txtFirstName.GotFocus
Farsi("fa")
Clipboard.Clear()
EndSub
PrivateSub txtFirstName_KeyDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFirstName.KeyDown
Farsi("fa")
Clipboard.Clear()
EndSub
PrivateSub txtFirstName_KeyPress(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFirstName.KeyPress
Farsi("fa")
Clipboard.Clear()
EndSub
PrivateSub txtFirstName_KeyUp(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFirstName.KeyUp
Farsi("fa")
Clipboard.Clear()
EndSub
PrivateSub txtFirstName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFirstName.TextChanged
Farsi("fa")
Clipboard.Clear()
EndSub

choobin84
شنبه 19 آبان 1386, 06:42 صبح
خیلی سختش کردی.
نیاز به این همه رویداد نیست.
key down- keypress,... یکیشون کافی بود

eyes_shut_number1
شنبه 19 آبان 1386, 17:33 عصر
اکه سختت نیست
یه ReSearchروی key down- keypress ,... بکن(فرقش)

choobin84
شنبه 19 آبان 1386, 21:20 عصر
اکه سختت نیست
یه ReSearchروی key down- keypress ,... بکن(فرقش)
متشکرم از راهنمایی و پیشنهادتون. نه ، سختم نیست.

GotFucus
KeyPress
KeyDown
KeyUp
TextChange
رویدادهایی هستند که در این کد مشاهده می شوند. ظاهرا قصد شما یک چیز بیشتر نیست. فارسی کردن تکست باکس.

سئوال اینه، برای فارسی کردن یک تکست باکس به این همه رویداد برای یک تکست باکس احتیاج داریم؟
جواب، به طور مسلم نه.
اگر قرار باشد اینطوری کد بنویسیم پس شما،رویدادهای
Enter
Leave
MouseDown
MouseEnter
,.......
را فراموش کرده اید. شاید بتوان به نوعی تمام رویدادهای تکست باکس را در این رابطه دخیل بدانیم. چون می خواهیم تکست باکس را فارسی کنیم.

من یه راه بهتر بلدم.
فقط از یکی از رویدادها استفاده کنیم.
KeyDown-Enter-KeyPress-GotFucus- و... یکیشون کفایت می کنه.


یه راه دیگه هم که بلدم اینه که کد داخل اون تابع رو که در بالا نوشتید در Form_Load مربوط به فرم بنویسید.


یه راه خوب دیگه اینه که اون تابع رو در یک UserControl پیاده سازی کنید و اون uc رو مورد استفاده قرار بدید.



یک تابع دو خطی هم هست که همین کار رو می کنه.

System.Globalization.CultureInfo lan=new System.Globalization.CultureInfo("fa-ir");
InputLanguage.CurrentInputLanguage=InputLanguage.F romCulture(lan);
شاید این دو خط رو تا حالا ندیده بودید.رویداد مورد استفاده هم برای این دو خط می تونه خیلی مهم نباشه.
حتی به ClipBoard.Clear هم احتیاج نداره.


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

PrivateSub txtFirstName_KeyDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFirstName.KeyDown
Farsi("fa")
Clipboard.Clear()
EndSub
PrivateSub txtFirstName_KeyUp(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFirstName.KeyPress
Farsi("fa")
Clipboard.Clear()
EndSubمیتونید تابع مربوط به keyUp رو از داخل تابع مربوط به keyDown صدا بزنید: اینطوری


PrivateSub txtFirstName_KeyDown(ByVal sender AsObject, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFirstName.KeyDown,txtFirstName.KeyUp
Farsi("fa")
Clipboard.Clear()
EndSub
سئوال: چرا باید سر خودمونو شلوغ کنیم، وقتی با کدهای کمتری می تونیم همون نتیجه رو بگیریم؟