PDA

View Full Version : سوال: ایجاد یک تابع برای استفاده در فرم های مختلف برنامه



atf1379
سه شنبه 04 شهریور 1399, 21:18 عصر
سلام
فرض کنید برنامه دارای چند فرم می باشد و در هر فرم تعدادی کنترل از نوع تکست باکس و یا لیبل وجود دارد . تعداد کنترل ها در هر فرم متغییر است
میخواهم یک تابع (فانکشن ) داشته باشم با 10آرگومان ورودی( به تعداد حداکثر کنترل های فرم ها)
میخواهم وقتی این تابع رو در هر فرم فراخوانی می کنم مثلاً تکست باکس های آن فرم تهی شود و یا کپشن لیبل های مشخصی که بر روی فرم است پاک شود.
نمیدونم آیا امکان نوشتن چنین تابعی وجود دارد یا نه ؟
با تشکر

atf1379
سه شنبه 11 شهریور 1399, 15:27 عصر
سلام
فرض بفرمائیدیک تابع عمومی بصورت زیر داریم


Public Function VisTxt(Txt1 As TextBox, Txt2 As TextBox, Txt3 As TextBox)
Txt1.Visible = False
Txt2.Visible = False
Txt3.Visible = False

End Function


حالا فرمی داریم که فقط 2 تکست باکس دارد . میخواهم با استفاده از تابع فوق این دو تکست باکس را مخفی کنم
فراخوانی تابع :


Call VisTxt(text2, Text3)


در کد فراخوانی فوق چون بجای سه ورودی دو ورودی درج شده خطا صادر میشود ولی اگر فرم من 3 تکست باکس داشته باشد مشکلی وجود ندارد
در کل منظورم این است که آرگومان های اون تابع عمومی باید به چه صورتی نوشته شود که در فراخوانی اگر تعداد ورودی ها هم کمتر از تعداد آرگومان ها بود مشکلی ایجاد نشود
آرگومان از نوع اختیاری باشد
با تشکر

the king
سه شنبه 11 شهریور 1399, 22:35 عصر
سلام
فرض بفرمائیدیک تابع عمومی بصورت زیر داریم


Public Function VisTxt(Txt1 As TextBox, Txt2 As TextBox, Txt3 As TextBox)
Txt1.Visible = False
Txt2.Visible = False
Txt3.Visible = False

End Function


حالا فرمی داریم که فقط 2 تکست باکس دارد . میخواهم با استفاده از تابع فوق این دو تکست باکس را مخفی کنم
فراخوانی تابع :


Call VisTxt(text2, Text3)


در کد فراخوانی فوق چون بجای سه ورودی دو ورودی درج شده خطا صادر میشود ولی اگر فرم من 3 تکست باکس داشته باشد مشکلی وجود ندارد
در کل منظورم این است که آرگومان های اون تابع عمومی باید به چه صورتی نوشته شود که در فراخوانی اگر تعداد ورودی ها هم کمتر از تعداد آرگومان ها بود مشکلی ایجاد نشود
آرگومان از نوع اختیاری باشد
با تشکر

Public Function VisTxt(Txt1 As TextBox, Optional Txt2 As TextBox, Optional Txt3 As TextBox)
Txt1.Visible = False
If Not Txt2 Is Nothing Then Txt2.Visible = False
If Not Txt3 Is Nothing Then Txt3.Visible = False
End Function

atf1379
چهارشنبه 12 شهریور 1399, 11:37 صبح
Public Function VisTxt(Txt1 As TextBox, Optional Txt2 As TextBox, Optional Txt3 As TextBox)
Txt1.Visible = False
If Not Txt2 Is Nothing Then Txt2.Visible = False
If Not Txt3 Is Nothing Then Txt3.Visible = False
End Function


:تشویق::تشویق::تشویق:

atf1379
یک شنبه 24 مهر 1401, 18:46 عصر
Public Function VisTxt(Txt1 As TextBox, Optional Txt2 As TextBox, Optional Txt3 As TextBox)
Txt1.Visible = False
If Not Txt2 Is Nothing Then Txt2.Visible = False
If Not Txt3 Is Nothing Then Txt3.Visible = False
End Function



سلام
اگه عمل مخفی کردت تکست باکس ها رو در حلقه for ... next قرار بدهیم کد رو به چه صورتی باید نوشت ؟
من کد رو بصورت زیر تغییر دادم ولی خطا میده



Public Function VisTxt(Txt1 As TextBox, Optional Txt2 As TextBox, Optional Txt3 As TextBox)

dim i as integer
for i=1 to 3
If Not "Txt" & i Is Nothing Then "Txt" & i.Visible = False

End Function

mazoolagh
دوشنبه 25 مهر 1401, 17:04 عصر
اگه عمل مخفی کردت تکست باکس ها رو در حلقه for ... next قرار بدهیم کد رو به چه صورتی باید نوشت ؟

1- اسامی کنترل ها رو با , یا ; JOIN کنین و بصورت یک STRING یکجا به روتین بفرستین.

2- در روتین اول اسامی رو SPLIT و بعد هر کدوم رو بصورت زیر باهاش کار کنین:
me.controls(control_name).visible=false

3- اگر همه اسامی کنترل ها مشابه هست مثل همین Txt1 , txt2 , ...
FOR i=1 TO 3
me.controls("Txt" & TRIM(i)).visible= false
NEXT

atf1379
دوشنبه 25 مهر 1401, 20:46 عصر
1- اسامی کنترل ها رو با , یا ; JOIN کنین و بصورت یک STRING یکجا به روتین بفرستین.

2- در روتین اول اسامی رو SPLIT و بعد هر کدوم رو بصورت زیر باهاش کار کنین:
me.controls(control_name).visible=false

3- اگر همه اسامی کنترل ها مشابه هست مثل همین Txt1 , txt2 , ...
FOR i=1 TO 3
me.controls("Txt" & TRIM(i)).visible= false

NEXT

ممنون جناب استاد mazoolagh (https://barnamenevis.org/member.php?9893-mazoolagh) !
حالت سوم مد نظر هست و میخوام تابع رو بصورت عمومی تعریف کنم که در فرم های مختلف از اون استفاده کنم به همین خاطر یک متغییر عمومی بصورت Public frm As Form تعریف کردم و در فرم این متغییر رو بصورت Set frm = Me به فرم مربوطه نسبت میدم و بجای me در حلقه از frm استفاده می کنم ولی خطا صادر میشه

ROSTAM2
چهارشنبه 27 مهر 1401, 10:31 صبح
سلام به همه من از VB6 شروع کردم به برنامه نویسی برای همین هم تا اونجایی که یادمه می شد از ورودی ParamArray هم در متود ها استفاده کرد.
بنابراین نیازی نیست ورودی ها رو بصورت جداگونه تعریف کنید ی ورودی ParamArray برای متود با تایپ مورد نظر تعریف می کنید و از اون ورودی بعنوان یک آرایه با عناصری از همون تایپ استفاده می کنید.

مثال:

Public Sub Visiblity(ParamArray args() As TextBox)
'Statements
End Sub

atf1379
چهارشنبه 27 مهر 1401, 13:14 عصر
سلام به همه من از VB6 شروع کردم به برنامه نویسی و به زبان بیسیک علاقه زیادی دارم برای همین هم تا اونجایی که یادمه می شد از ورودی ParamArray هم در متود ها استفاده کرد.
بنابراین نیازی نیست ورودی ها رو بصورت جداگونه تعریف کنید ی ورودی ParamArray برای متود با تایپ مورد نظر تعریف می کنید و از اون ورودی بعنوان یک آرایه با عناصری از همون تایپ استفاده می کنید. تمام.

مثال:

Public Sub Visiblity(ParamArray args() As TextBox)
'Statements
End Sub


https://groups.google.com/g/microsoft.public.vb.syntax/c/tQKP_Z57JJs


احسنت !:تشویق::تشویق::تشویق: