PDA

View Full Version : سوال: ارسال مقادير به يك Sub



اوبالیت به بو
جمعه 03 خرداد 1387, 19:38 عصر
يه سوال:
آيا ميشه مقدار يك TextBox رو به يك Function تويه يه Module ارسال كرد؟؟ توضيح ميدم:

اين UDT من هستش:

Type PhoneBook
FirstName As String * 10
LastName As String * 15
Phone As Double
Mobile As Double
End Type
Public Phone As PhoneBook

اين روالي هستش كه مي خوام تست كنه كه مقادير درست وارد TextBox هام بشن.

Public Sub CorrectValue(FirstNametxt As String, LastName As String, Phone As Double, Mobile As Double)
If FirstNametxt.Text = "" Then
MsgBox "Please Enter Your Name", vbCritical, "Error"
FirstNametxt.SetFocus
Else
Phone.FirstName = CStr(FirstNametxt.Text)
End If
If LastNametxt.Text = "" Then
MsgBox "Please Enter Your Last Name", vbCritical, "Error"
LastNametxt.SetFocus
Else
Phone.LastName = CStr(LastNametxt.Text)
End If
If IsNumeric(PhoneTxt.Text) = False Then
MsgBox "Please Enter Correct Phone Number", vbCritical, "Error"
PhoneTxt.SetFocus
Else
Phone.Mobile = CStr(PhoneTxt.Text)
End If
If IsNumeric(MobileTxt.Text) = False Then
MsgBox "Please Enter Correct Mobile Number ", vbCritical, "Error"
MobileTxt.SetFocus
Else
Phone.Mobile = CStr(MobileTxt.Text)
End If
End Sub

و دستوري كه باهاش روال رو فراخواني ميكنم اين هستش:

Call CorrectValue(FirstNameTxt.Text, LastNametxt.Text, PhoneTxt.Text, MobileTxt.Text)



ولي متاسفانه برنامم دو تا Error ميده:

وقتي مقادير درون TextBox رو صحيح وارد مي كنم پيغام خطاي Invalid Qualifier روميده
وقتي مقادير TextBox رو اشتباه يا وارد نمي كنم پيغام خطاي Type MisMatch رو ميد.
به نظر شما مشكل چية؟

xxxxx_xxxxx
جمعه 03 خرداد 1387, 19:52 عصر
توی ماژول هرجا که از اشیاء فرم استفاده کردی خطا داره. برای استفاده از مقدار یک textbox باید مقدار اونو در Form توسط sub ی که در ماژول نوشتی به عنوان پارامتر بدی.

توی کدی که برای ماژول نوشتی هرجا از خود شی استفاده کردی اشتباه هست.

چند دقیقه دیگه اگه تونستم ویرایشش می کنم.

xxxxx_xxxxx
جمعه 03 خرداد 1387, 19:58 عصر
راستی کار Cstr() چی هست؟؟؟

اوبالیت به بو
جمعه 03 خرداد 1387, 20:02 عصر
راستی کار Cstr() چی هست؟؟؟
تابعي هستش كه نوع مقدار يك متغير رو تبديل به نوع String مي كنه.

Num = -12.8
Cstr(Num) = "-12.8"

xxxxx_xxxxx
جمعه 03 خرداد 1387, 20:13 عصر
بخش اول رو اینطوری تعریف کنی بهتره:


Type PhoneBook
FirstName As String * 10
LastName As String * 15
Tel As Double
Mobile As Double
End Type
Public Phone As PhoneBook


پردازه ماژول هم به این صورت:




Public Sub CorrectValue(FirstName As String, LastName As String, Tel As Double, Mobile As Double)
If FirstName = "" Then
MsgBox "Please Enter Your Name", vbCritical, "Error"
Form1.FirstNametxt.SetFocus
Else
Phone.FirstName = CStr(FirstName)
End If
If LastName = "" Then
MsgBox "Please Enter Your Last Name", vbCritical, "Error"
Form1.LastNametxt.SetFocus
Else
Phone.LastName = CStr(LastName)
End If
If IsNumeric(Tel) = False Then
MsgBox "Please Enter Correct Phone Number", vbCritical, "Error"
Form1.PhoneTxt.SetFocus
Else
Phone.Tel = CStr(Tel)
End If
If IsNumeric(Mobile) = False Then
MsgBox "Please Enter Correct Mobile Number ", vbCritical, "Error"
Form1.MobileTxt.SetFocus
Else
Phone.Mobile = CStr(Mobile)
End If
End Sub




نحوه فراخوانی هم به همون صورت اول درسته.

موفق باشید

اوبالیت به بو
جمعه 03 خرداد 1387, 20:16 عصر
توی ماژول هرجا که از اشیاء فرم استفاده کردی خطا داره. برای استفاده از مقدار یک textbox باید مقدار اونو در Form توسط sub ی که در ماژول نوشتی به عنوان پارامتر بدی.

توی کدی که برای ماژول نوشتی هرجا از خود شی استفاده کردی اشتباه هست.

چند دقیقه دیگه اگه تونستم ویرایشش می کنم.
من تويه Declaration بخش General نوشتم ولي بازم همون پيغام رو مي داد

xxxxx_xxxxx
جمعه 03 خرداد 1387, 20:19 عصر
برای استفاده از اشیای یک فرم در ماژول حتما باید قبل از اسم شی ، اسم فرم بیاد. مثل:



Form1.MobileTxt.SetFocus

اوبالیت به بو
جمعه 03 خرداد 1387, 20:24 عصر
Type PhoneBook
FirstName As String * 10
LastName As String * 15
Tel As Double
Mobile As Double
End Type
Public Phone As PhoneBook

يكي از علتاش اينه كه يكي از فيلدهام اسمش با متغيرم برابره براي همين بايد از Phone به Tel تغيير پيدا بكنه. ولي جالبه بازم همين مشكل هست.
**يه علت ديگه هم داره اونم اگه گفتي؟؟؟؟ آخه مگه روال يا Sub مقدار برگشتي داره؟ اينم يه اشتباه ديگه بايد Function تعريف كنيم.
سورس رو ميزارم ببينيد.

عنوان تايپيك ويرايش شد!

xxxxx_xxxxx
جمعه 03 خرداد 1387, 20:41 عصر
من الان CN هستم شرمنده نمی تونم سورس رو ببینم.

منم برای همین همیشه از Function استفاده می کنم چه مقدار برگشتی بخوام چه نخوام.

موفق باشید. خدا نگهدار.

اوبالیت به بو
شنبه 04 خرداد 1387, 13:13 عصر
ايراداتي كه تا حالا پيدا كردم و اصلاح كردم:
1- نام يكي از ركوردها كه Phone بود و به Tel تغيير دادم.
2- استفاده از Function كه قبلاً از Sub استفاده كرده بودم.
3- تعريف Function در Declaration بخش General (قبلاً در Module تعريف شده بود)
پيغام خطاها:

وقتي مقادير درون TextBox رو صحيح وارد مي كنم پيغام خطاي Invalid Qualifier روميده
وقتي مقادير TextBox رو اشتباه يا وارد نمي كنم پيغام خطاي Type MisMatch رو ميد.

vbhamed
دوشنبه 06 خرداد 1387, 12:47 عصر
سلام
اينم فايل رفع مشكل شده شما