PDA

View Full Version : سوال: تنظيم نوع مشخصات گروهي ليبل ها



RESMAILY
چهارشنبه 09 تیر 1389, 13:34 عصر
به نام خدا
با سلام. فرمي طراحي شده است كه روي آن مثلا تعداد 20 عدد آپشن باتن و 20 عدد ليبل قرار دارد. مي خواهيم هرگاه آپشن باتن True شد مثلا رنگ ليبل هم تغيير نمايد.
آيا روشي وجود دارد تا با نوشتن فقط يك تابع بطور كلي،و فرضا قرار دادن آن در رويداد خود فرم، اين كار را انجام داد؟
توجه بفرماييد كه مي دانيم ميشود با نوشتن 20 تابع در رويداد مثلا كليك هريك از آپشن باتن ها مي توان اين كا را انجام داد. ولي با توجه به نوع كنترل(ليبل) مي خواهيم با نوشتن فقط يك تابع اين كا را انجام دهيم. با تشكر

mazoolagh
چهارشنبه 09 تیر 1389, 14:34 عصر
فکر کنم بشه

alirezabahrami
چهارشنبه 09 تیر 1389, 15:44 عصر
به نام خدا
با سلام. فرمي طراحي شده است كه روي آن مثلا تعداد 20 عدد آپشن باتن و 20 عدد ليبل قرار دارد. مي خواهيم هرگاه آپشن باتن True شد مثلا رنگ ليبل هم تغيير نمايد.
آيا روشي وجود دارد تا با نوشتن فقط يك تابع بطور كلي،و فرضا قرار دادن آن در رويداد خود فرم، اين كار را انجام داد؟
توجه بفرماييد كه مي دانيم ميشود با نوشتن 20 تابع در رويداد مثلا كليك هريك از آپشن باتن ها مي توان اين كا را انجام داد. ولي با توجه به نوع كنترل(ليبل) مي خواهيم با نوشتن فقط يك تابع اين كا را انجام دهيم. با تشكر
سلام
درنمونه زير خواسته شما براي تعداد 5 عدد آپشن باتن با ليبل هاي مربوطه انجام شد.
شما ميتوانيد هر تعداد ديگر آپشن باتن با ليبل هاي مربوطه را به آن بيفزايد يا كم كنيد وفقط تعداد intCouter را بر اساس تعداد آنها مشخص كن !
موفق باشيد

alirezabahrami
شنبه 12 تیر 1389, 08:22 صبح
سلام
درنمونه زير خواسته شما براي تعداد 5 عدد آپشن باتن با ليبل هاي مربوطه انجام شد.
شما ميتوانيد هر تعداد ديگر آپشن باتن با ليبل هاي مربوطه را به آن بيفزايد يا كم كنيد وفقط تعداد intCouter را بر اساس تعداد آنها مشخص كن !
موفق باشيد
عجيبه! ، واقعاً جواب داده شده شده از نظر دوستان منطقي نبود ؟

RESMAILY
شنبه 12 تیر 1389, 08:40 صبح
به نام خدا
با سلام به همه دوستان و مخصوصا آقاي بهرامي
ضمن تشكر از توجهي كه به مشكل بنده شد. ذكر يك نكته لازم است اينكه شايد در سوال من موضع درست بيان نشده باشد. خلاصه آن كه منظور اين است كه شما تعدادي آپشن باتن «مستقل» از هم و نه داخل يك OptionBotton Group ، روي فرمي داريد كه هركدام يك ليبل هم در كنار خود دارند.
به عنوان مثال يك تقويم طراحي كرده ايد و حالا مي خواهيد در صورت True شدن آپشن باتن رنگ ليبل قرمز و در صورت 0 بودن سفيد بشود. يعني ممكن است كه در هر بار تعدادي از آپشن ها True باشند و يا اصلا همه 0 باشند.
ما مثلا در رويداد AfterUpdate «فرم» مي توانيم به ActiveControl دسترسي داشته باشيم و خواسته خود را اجرا نماييم. ولي در مورد «ليبل» و «باكس» و اين قبيل ظاهرا موضوع متفاوت است و بي اطلاعي من در اين زمينه است.

alirezabahrami
شنبه 12 تیر 1389, 12:00 عصر
به نام خدا
با سلام به همه دوستان و مخصوصا آقاي بهرامي
ضمن تشكر از توجهي كه به مشكل بنده شد. ذكر يك نكته لازم است اينكه شايد در سوال من موضع درست بيان نشده باشد. خلاصه آن كه منظور اين است كه شما تعدادي آپشن باتن «مستقل» از هم و نه داخل يك OptionBotton Group ، روي فرمي داريد كه هركدام يك ليبل هم در كنار خود دارند.
به عنوان مثال يك تقويم طراحي كرده ايد و حالا مي خواهيد در صورت True شدن آپشن باتن رنگ ليبل قرمز و در صورت 0 بودن سفيد بشود. يعني ممكن است كه در هر بار تعدادي از آپشن ها True باشند و يا اصلا همه 0 باشند.
ما مثلا در رويداد AfterUpdate «فرم» مي توانيم به ActiveControl دسترسي داشته باشيم و خواسته خود را اجرا نماييم. ولي در مورد «ليبل» و «باكس» و اين قبيل ظاهرا موضوع متفاوت است و بي اطلاعي من در اين زمينه است.
نمونه جديد را هم ببين !
موفق باشيد

mazoolagh
شنبه 12 تیر 1389, 14:51 عصر
با اجازه جناب بهرامی
چون موضوع تاپیک جالب و آموزنده هست و ممکنه دوستان دیگری هم بهش نیاز داشته باشن روش دیگه ای رو هم پیشنهاد میکنم:

1- بطور کلی وقتی قرار هست تعداد زیادی کنترل به یک رخداد رفتار مشابهی داشته باشن معمولا اسامی کنترلها رو سریال و معنی دار در نظر میگیرن مثلا opt01 تا opt20 و optlbl01 تا optlbl20 در غیر اینصورت باید اسامی کنترلها رو در یک array معرفی کنین که در نمونه جناب بهرامی از روش اول استفاده شده که برای این مسئله بهترین هست

2- در مرحله بعدی باید روتین کلی رو به شکل یک function بنویسین. بهتر هست تابع شما از نوع boolean باشه که در صورت هر مشکل مقدار false رو برگردونه

3- حالا کافی هست در رویداد onopen فرم کدی بنویسین که بیاد برای تمام کنترلهای مورد نظر تابع رو به رخدادی که میخواین (در اینجا afterupdate) منسوب کنه

قبل از هر چیز برای بازدیدکنندگانی که نمونه آقای بهرامی گرامی رو دانلود نکردن یک توضیح کوچک بدم که ایشون از تایمر فرم استفاده کردن و هر یک ثانیه وضعیت رو چک میکنن

برای روشنتر شدن موضوع کد نمونه رو میگذارم:

تابع :


function z() as boolean
on error goto erx
dim x as string
x=right(me.activecontrol.name,2)
if me.activecontrol then
me("lblopt"+x).backcolor=rgb(255,0,0)
else
me("lblopt"+x).backcolor=rgb(255,255,255)
z=true
erx:
z=false
end function
و روتین form onload




dim ctl as control
for each ctl in me.controls
if left(ctl.name,2)="opt" then
ctl.properties("afterupdate")="=z()"
endif
next

alirezabahrami
شنبه 12 تیر 1389, 16:00 عصر
سلام
ضمن تشكر از جناب mazoolagh عزيز بخاطر شركتشون در اين تاپيك ، در همينجا از دوستان ديگر بخصوص با تجربه هاي بزرگوار تقاضا ميشود تا حد امكان در تاپيك ها شركت كنند تا انشاءالله با دلگرمي و انگيزه مضاعف نسبت به ارائه جواب تاپيك ها اقدام لازم بعمل آيد !
با تشكر

RESMAILY
دوشنبه 14 تیر 1389, 07:57 صبح
به نام خدا
با سلام و تشكر از آقاي بهرامي و mazoolagh در وقت نوشتن اين پاسخ هنوز فرصت امتحان راه حل هاي دوستان را پيدا نكرده ام و لي با توجه به ايده mazoolagh به نظرم اگر تابع را در رويداد onKeyPress فرم قرار دهيم احتمالا بهتر به نتيجه برسيم. فعلا از همين مقدار هم ممنون هستم. ولي كلا اين مشكل را بنده با Lablel و Box و Image دارم. زياد پيش مي آيد كه د برنامه اي نياز به دانستن محل كنترل مزبور و اينكه باقي مشخصات آن چيست بر مي خوريم. فرضا مي خواهيد تعدادي تصوير را روي يك فرم (يا ريپورت؟) جابجا و يا كوچك و بزرگ نماييد. مخصوصا اگر برنامه در حالت mde بلاشد كه نتوان از CreateControl استفاده نمود. قطعا ره حل هايي وجود دارد كه به افزايش كارآيي برنامه نويسان آكسس كمك خواهد كرد.