PDA

View Full Version : آموزش: تایپ تنها عدد در تکس باکس TexrBox با استاندارد ویندوز



M.T.P
یک شنبه 22 فروردین 1389, 19:56 عصر
با توجه به اینکه سوالات متعددی در رابطه با عنوان این تاپیک در این تالار وجود داره و پاسخ های متفاوتی هم از طرف دوستان به این سوال داده شده (ضمن احترام به نظر کاربران) از مدیران عزیز خواهشمندم چنانچه این پست رو لازم و مفید میدونن به عنوان یک پست کلیدی در رابطه با این موضوع به کاربران معرفی کنند و یا صورت لزوم این پست رو به انتهای تاپیک مشابه دیگه منتقل کنید.

بهترین روش و استاندارد ترین روش برای این کار استفاده از API و استاندارد خود ویندوز هست.

کد زیر رو به برنامه اضافه کنید.




Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&

Function TextBox_NumberMode(txt As TextBox, Flag As Boolean)
Dim curstyle As Long
Dim newstyle As Long
Dim SetNoNums As Long
curstyle = GetWindowLong(txt.hwnd, GWL_STYLE)
If Flag Then
curstyle = curstyle Or ES_NUMBER
Else
curstyle = curstyle And (Not ES_NUMBER)
End If
SetNoNums = SetWindowLong(txt.hwnd, GWL_STYLE, curstyle)
txt.Refresh
End Function


با فرض اینکه TextBox شما اسمش Text1 باشه روش استفاده از این تابع بصورت زیر میباشد:




TextBox_NumberMode Text1,True



چنانچه از Theme ویندوز در برنامه خود استفاده کرده باشید در صورت وارد نمودن حروف در تکس باکس بجای عدد با پیغامی از طرف ویندوز به شکل زیر مواجه خواهید شد.(عکس ضمیمه)

xxxxx_xxxxx
یک شنبه 22 فروردین 1389, 20:47 عصر
این روش قبلاً در اینجا (http://www.barnamenevis.org/forum/showpost.php?p=819202&postcount=4) و اینجا (http://barnamenevis.org/forum/showpost.php?p=749970&postcount=4) نیز گفته شده بود!

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

با تشکر.
تاپیک قفل شد/