PDA

View Full Version : دسترسی به خواص یک usercontrol activex از خارج در VB



peivand
سه شنبه 06 آذر 1386, 11:45 صبح
من یک user control ساختم که چندتا فرم هم داخل آن قرار دارد ویک کلاس ماژول هم همینطور حالا در یکی از فرمها میخواهم اطلاعات درون usercontrol را نمایش یا تغییر دهم اما نمیدانم چگونه میشود به این مقادیر از بیرون (فرمی در usercontrol) دسترسی پیداکرد؟

class module name : controlprop
...
:in usercontrol
dim contp() as new controlp
...
in sh.frm inside usercontrol
usercontrol.contp
error?

Mbt925
سه شنبه 06 آذر 1386, 18:00 عصر
دوست عزیز شما نمی تونین از داخل فرمتون به اکتیوایکس دسترسی داشته باشین.

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



Dim FrmNew as New FormCustom
FrmNew.Show

FrmNew_CustomEvent()

Insert Your Code Hear

End CustomEvent


اگه واضح نیست بگین تا یه نمونه ساده قرار بدم.

peivand
چهارشنبه 07 آذر 1386, 10:28 صبح
دوست عزیز با تشکر از لطف شما در پاسخ سریع به سوال من اگر اجازه بدید من مشکلم را دقیقتر بگم شاید راهگشا باشه:
من یه کنترل و یک فرم داخل اون ساختم که اسم فرم رو ویزاردگذاشتم که روال کار به این شکله که:
ویزارد یکسری اطلاعات در مورد چند کنترل مثلا: textbox , checkbox , Label و ... از کاربر میگیره بعد اونها رو بهمان شکلی که کاربر تعریف کرده روی یوزر کنترل نمایش میده.
اطلاعاتی که در فرم ویزارد قرارگرفته را از طریق یک کلاس ماژول(controlprop) که در ماژول عمومی برنامه module1 آنرا بصورت عمومی تعریف کردم قابل دسترسی برای تمام برنامه است: public contp() as new controlprop
من این اطلاعات را در فرم ویزارد، درون این کلاس که بصورت آرایه ای قابل دستیابی است قرار میدهم و در درون usercontrol بازیابی و استفاده میکنم به این صورت برنامه درست کار میکندو
البته تمام این آرایه را توسط writeproperties وReadproperties ذخیره و بازیابی میکنم تا اینجا هیچ اشکالی وجود ندارد
اما مشکل از جایی شروع میشود که ocx حاصله را در یک برنامه استفاده میکنیم ! مشکل اینجاست که اگر روی یک فرم یک کنترل از این نوع قرار دهیم همه چیز صحیح است اما همینکه کنترل دوم از این نوع روی فرم قرار میگیرد این کنترل اطلاعات ویزارد کنترل قبلی را که بصورت عمومی بود گرفته واگر تغییری در اطلاعات ویزارد کنترل دوم بدهیم عینا در کنترل اول هم درج میشود
بعنوان راه حل من ابتدا سعی کردم نام خواص هر کدام از کنترلها را در writeproperties عوض کنم اما مشکل بازهم حل نشد بعد سعی کردم در داخل هر کدام از اجزاء کنترل (فرم ویزارد و خود یوزرکنترل) یک instance از کلاس ماژول بصورت خصوصی تعریف کنم privare contp() as new controlprop
اما مشکل اینجاست که چطور بعد از گرفتن اطلاعات از کاربر در فرم ویزارد آنها را به یوزر کنترل منتقل کنم؟ چرا که contp مربوط به یوزرکنترل دیگر از اینجا قابل دسترسی نیست . امیدوارم توانسته باشم مشکل را بخوبی شرح دهم!

Mbt925
چهارشنبه 07 آذر 1386, 11:44 صبح
منظورتونو متوجه شده بودم.

راه حلی که گفتم در عین سادگی شاید یکم مبهم باشه ولی روش استاندارد برای این کاریه که میخواین انجامش بدین.

من بجای اینکه براتون اینجا توضیحش بدم به نمونه ساده براتون می نویسم و در اسرع وقت اینجا میذارم.
اینطوری راحت تر و سریعتر راه حل دستون میاد.

peivand
شنبه 10 آذر 1386, 15:14 عصر
از محبت و لطف شما بینهایت سپاسگذارم و منتظر نمونه برنامه شما هستم

peivand
دوشنبه 12 آذر 1386, 15:13 عصر
با لطف و راهنمایی شما تونستم مشکلمو حل کنم بازم ممنون با آرزوی موفقیت برای شما دوست عزیز

Mbt925
دوشنبه 12 آذر 1386, 18:15 عصر
دوست عزیز نمونه حاضره.

راه حلی که توی این نمونه می بینین راه حل استاندارد برای این کاره که معمولا استفاده نمیشه.
فقط کاربرای حرفه ای از این روش استفاده می کنن ، چون معمولا کاربرای دیگه این روش رو بلد نیستن.