با سپاس
یکی از دوستان فرمودند نحوه کار با EditText رو درون یک پست مختصر و مفید توضیح بدم که بنده هم خدمتتون عرض می کنم.
برای کار با ادیت تکست میتونید اون رو از دیزاینر ادد کنید یا اینکه به صورت دستی اینیشیالایز کنید .
برای این کار اول میام تو دیزاینر یه EditText1 رو ادد میکنیم .
بعد از تو دیزاینر روی خود EditText1 راست کلیک میکنیم و گزینه آخر Generate رو انتخاب کرده و هر کدوم از گزینه ها که لازم هست رو کلیک میکنیم تا به پروژه امون اضافه بشه
بعد میام تو پروژه برای اینکه ما بتونیم وقتی فارسی نوشته شد متن مون بره سمت راست و انگلیسی شده بره سمت چپ چه کنیم ؟
برای این کار میایم از کتابخانه Recognize کمک میگیریم .
تیک کتابخانه رو از قسمت لایبری های بیسیک تیک میزنیم و بعد میایم توی سورس معرفی و اینیشیالایزش می کنیم به صورت زیر :
Sub Globals Private EditText1 As EditText Dim rec As Recognize End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("l1") rec.Initialize End Sub
الان ما در بالا اومدیم Recognize رو با نام rec فراخوانی کردیم .
حالا چطوری از rec برای کارمون کمک بگیریم ؟
در این موقع ما باید بیایم رویداد چنج تکست رو به پروژه امون اضافه کنیم به صورت زیر :
Sub EditText1_TextChanged (Old As String, New As String) If rec.checkFarsiCharecter(New) Then EditText1.Gravity=Gravity.RIGHT Else EditText1.Gravity=Gravity.LEFT End If End Sub
با این کد هر زمانی فارسی نوشته بشه میره سمت راست و هر زمانی انگلیسی نوشته بشه میره سمت چپ
چون کیبوردم فارسی نداشت پست کردم براتون که متوجه بشید .
خوب بخش بعدی مبخواهیم برای ادیت تکست شرط بزاریم که مثلا عدد اولمون ۰ باشه عدد دوم ۹ و غیره
یک مثال براتون میارم
If EditText1.Text.SubString2(0,1)=0 Then Else EditText1.Text="" Msgbox("ابتدای رقم باید ۰ باشد","خطا") End If If EditText1.Text.SubString2(1,2)=9 Then Else EditText1.Text="0" Msgbox("دومین رقم باید ۹ باشد","خطا") End If
ما الان با دستور ساپ استرینگ اومدم و شرط گذاشتم که رقم اول باید ۰ باشه در غیر این صورت یه مسیج باکس میده .
بعد از ۰ باید رقم دوم هم ۹ باشه که در غیر این صورت بازم یک مسیج باکس میده و کار های دیگه که میتونید بهش اضافه کنید .
یک شرط دیگه که میتونیم برای ادیت تکست بزاریم این هست که محدودش کنیم چند کارکتر قبول کنه .
مثلا الان من میگم ۱۱ کاراکتر با کد زیر بیشتر قبول نکنه :
If New.Length > 11 Then EditText1.Text = Old EditText1.SelectionStart = Old.Length End If
دستور بعدی کار با رنگ متن و اندازه و هینت ( hint ) و رنگ هینت می باشید.
EditText1.TextSize=20 EditText1.TextColor=Colors.Yellow EditText1.HintColor=Colors.White
الان خط اول اومدیم سایز رو دادیم
خط دوم اومدیم رنگ متن نوشتاری توسط کاربر رو دادیم
خط سوم هم اومدیم رنگ متن پیش فرض که راهنمای کاربر هست رو دادیم که به محض کلیک مخفی میشه و با دستور زیر میتونید هینت رو برای هر ادیت تکست متنش رو اضافه کنید :
EditText1.Hint="yahoo98"
یه دستور دیگری که میتونیم برای ادیت تکست بنویسیم درست وارد کردن ایمیل کاربر هست که متوجه درست یا اشتباه بودنش رو متوجه بشیم :
اگه ما یه edit text داشته باشیم و بخوایم بدونیم که چطوری به کاربر بگیم که اگه ایمیل اشتباه وارد کرد
مثلا صحیح به صورت dashesi@gmail.com
و نا صحیح dashesi@gmail
یا به هر صورتی که ظاهر ادرس ایمیل رو نداشته باشه به صورت زیر می تونیم کد بنویسیم
Sub Validate_Email(EmailAddress As String) As Boolean Dim MatchEmail As Matcher = Regex.Matcher("^(?i)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])$", EmailAddress) If MatchEmail.Find = True Then 'Log(MatchEmail.Match) Return True Else Return False End If End Sub
کد بالا یه ساب کد هست
که می تونیم به صورت زیر ازش استفاده کنیم (من داخل یه دکمه تستش کردم)
Sub button1_Click strEmail = txtEmail.Text.Trim If Validate_Email(strEmail) = False Then Msgbox("فرمت ایمیل صحیح وارد نشده است", "خطا") Return End If
و اما دستور بعدی :
دستور بعدی تشخیص زبان کیبرد کیبورد هست که ما میتونیم بدون هیچ کتابخانه ای با کد های اسکی به صورت زیر امجامش بدیم :
واسه این کار میتونید یه ترفند بزنید ببیند کد Ascii واسه حروف انگلیس اینجوریه
A-Z برابر ۶۵-۹۰ هست
a-z برابر ۹۷-۱۲۲ هست
حالا بیاید تو رویداد change ادیت تکستت شرط بذارید که اگر حرف اول تو این بازه بود انگلیسی هست اگه نبود فارسیه واسه گرفتن کد اسکی هم خود b4a تابع دارد.
Dim EditText1 As EditText Dim st As Char Dim t As Int st=EditText1.Text.SubString2(0,1) t=Asc(st) If (t>=65 AND t<=90 ) OR (t>=95 AND t<=122) Then Msgbox("English","") Else Msgbox("فارسی","") End If
و یه دستور دیگه هم هست برای اینکه ادیت تکست یا ادیت تکست ها خالی بود انجام بده که به این صورت می باشد .
if EditText1.text="" or EditText2.text="" then else endif
مخفی کردن اشاره گر ادیت تکست
ابتدا کتابخانه JavaObject تیک رو بزنید.
(Sub setCursorVisible(edt As EditText, Visible As Boolean Dim jo = edt As JavaObject ((jo.RunMethod("setCursorVisible", Array As Object(Visible End Sub
برای نمایش دادن :
(setCursorVisible(editText1 , True
برای نمایش ندادن :
(setCursorVisible(editText1 , false
امیدوارم مفید واقع گردد خدمت شما عزیزان
ارادتمند شما سید اسماعیل