View Full Version : سوال: كليك روي فورم
RESMAILY
یک شنبه 11 تیر 1391, 15:49 عصر
به نام خدا
با سلام. تعدادي ليبل روي يك فرم دارم. (مثلا 100 تا.از L_1 تا L_100 ) مي خواهم با كليك روي هركدام عمل خاصي انجام شود. براي آنكه صد تا event ننويسيم چه بايدكرد؟ اصلا براي آنكه رويداد كليك روي فرم مثل رويداد هاي صفحه كليد، فعال شود چه بايد كرد؟
paolo2003
دوشنبه 12 تیر 1391, 07:52 صبح
در صورتیکه همه رویداد ها قرار کاری شبیه به هم انجام بدن ، تو قدم اول بهتره که یه تابع بنویسید و رویداد های مورد نظر رو به اون وصل کنید.
اگه ممکنه فایل رو پیوست کنید یا بیشتر در خصوص اون توضیح بدین.
RESMAILY
دوشنبه 12 تیر 1391, 09:48 صبح
به نام خدا
با سلام. طبعا همينطوره. مشكل اينجاست كه براي 200 تا ليبل يا بايد دويست تا event بنويسيم يا يك كلاس ماجول عجيب و غريب تعريف كنيم كه باعث قولنج و سرگيجه هست!
به هرحال اگر رويداد كليك روي فرم مثل رويداد صفحه كليد بود مي شد كار آسان بود. يك كليك يا ماوس داون و بعد اسم ليبل را در مي اورديم و مي رفتيم دنبال كار.
ولي موضوع اين است كه رويداد كليك در فرم فقط مواقع خاصي (ظاهرا) كار مي كند يا من بلد نيستم. البته در اكسل به روش ساده اي مي شود كلاس ماجول مورد نظررا ايجاد كرد. ولي توابع اش در آكسس كاربرد ندارد و تغييراتي مي خواهد تا با كلاس ماجول هاي احتمالي ديگر قاطي نكند كه بازهم من بلد نيستم.
دوستان اگر فكر مي كنند راهي ندارد لااقل اگر كسي مي داند بفرمايند كه چطور مي شود با كد نويسي اين 200 تا event را در يك حلقه اي چيزي، بنويسيم تا دستكم به كمك آن موضوع را موقتا حل كنم.
خلاصه گيريم از دست اين دوستان سفارش دهنده برنامه هاي عجيب و غريب و البته مجاني!:گیج:
Abbas Amiri
دوشنبه 12 تیر 1391, 11:35 صبح
یک راه میتواند به اینصورت باشد که شما در فرمتان مانند زیر یک تابع تعریف کنید
Public Function LabelClick(N As Integer)
Dim ctl As Control
Set ctl=Me("L_" & N)
' Type Your Code
End Function
ودر مقابل رویداد Click آنها تایپ کنید
=LabelClick(LabelNumber)
mazoolagh
دوشنبه 12 تیر 1391, 11:59 صبح
همونطور که خودتون هم اشاره کردین کافی هست key preview فرم رو Yes بگذارین. حالا میتونین رخدادهای کار با کیبرد مثل keydown/keypress رو در سطح فرم و قبل از به کنترل ارسال بشن در دست بگیرین و با استفاده از activecontrol کنترلی رو که باعث رخداد شده پیدا کنین و مابقی ماجرا هم که ساده است. یا از اسم کنترل یا از Tag یا از نوع اون و ... میتونین استفاده کنین....اما متاسفانه این برای موس کار نمیکنه.
اما یک روش کلی هست که شما میتونین با کدنویسی هر تابع دلخواهی رو بعنوان event proc یک رخداد یک کنترل تعریف کنین.
me.control_name.event_name="=functiion_name([arguments])
مثال:
ME.TXT3.ONCLICK="=FUNC1()"
برای اینکه مطلب شفاف تر بشه کدهای زیر رو در هر فرم دلخواهی که دارین بگذارین و نتیجه اش رو ببینن:
PUBLIC FUNCTION GLOBAL_FORM_ONCLICK(CONTROL_NAME AS STRING) AS BOOLEAN
DIM V AS VARIANT
V=MSGBOX(CONTROL_NAME)
GLOBAL_FORM_ONCLICK=TRUE
END FUNCTION
کد پایین رو در FROM OPEN بگذارین:
DIM CTL AS CONTROL
FOR EACH CTL IN ME.CONTROLS
CTL.ONCLICK = "=GLOBAL_FORM_ONCLICK('" + CTL.NAME + "')"
NEXT
mazoolagh
دوشنبه 12 تیر 1391, 12:02 عصر
اوپس!
زمانی که داشتم پاسخ رو مینوشتم هنوز جناب امیری پاسخ نداده بودن - به هر حال ...
Abbas Amiri
دوشنبه 12 تیر 1391, 16:43 عصر
با تشکر از mazoolagh عزیز
برای منظور دوستمون کمی تغییر در کد Form_Open کاررا راحت میکند
Private Sub Form_Open(Cancel As Integer)
Dim CTL As Control
For Each CTL In Me.Controls
If Left(CTL.name, 2) = "L_" Then 'Only Apply for L_x
CTL.OnClick = "=FUNC1(" & Right(CTL.name, Len(CTL.name) - 2) & ")"
End If
Next
End Sub
RESMAILY
دوشنبه 12 تیر 1391, 19:09 عصر
به نام خدا
با سلام. بقول بهرنگ خود نامردش بود! كچل كرد مارا بخدا.
با تشكر از دوستان عزيز mazoolagh و اميري. ضمنا اين نكته را هم متوجه شدم كه تفاوتي هست در Function و SUb در اين مواقع. ظاهرا براي sub حتما يك call هم بايد باشد. خدا راشكر و باز هم تشكر.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.