PDA

View Full Version : سوال: نحوه دسترسی به اشیاء یک فرم DLL



poorman
چهارشنبه 15 آبان 1392, 04:24 صبح
سلام دوستان

من فرم هام رو توی DLL طراحی کردم و توی پروژه اصلی فراخوانی میکنم
مشکلم اینجاست که نمیتونم به اشیا داخل فرمم دسترسی داشته باشم و اونها رو قبل از باز کردن فرم تغییر بدم

کسی میتونه کمکم کنه ؟ ممنون میشم :)

AliRezaBeytari
چهارشنبه 15 آبان 1392, 13:07 عصر
من هم همچین مشکلی دارم !!!
لطفا راهنمایی کنید !!!

xxnagin
چهارشنبه 15 آبان 1392, 19:16 عصر
سلام
اشیا باید به صورت public باشند

AliRezaBeytari
چهارشنبه 15 آبان 1392, 20:46 عصر
سلام
اشیا باید به صورت public باشند

میشه بیشتر توضیح بدید !!!!

xxnagin
چهارشنبه 15 آبان 1392, 21:08 عصر
اشیا باید public باشن تا در همه جا بتونی ازش استفاده کنی
ببین شما وقتی یه شی (مثلا دکمه)رو روی فرم قرار میدی به صورت friend هستش که فقط توی یه پروژه قابل استفاده هستش نه چند تا پروژه

poorman
چهارشنبه 15 آبان 1392, 21:22 عصر
اشیا باید public باشن تا در همه جا بتونی ازش استفاده کنی
ببین شما وقتی یه شی (مثلا دکمه)رو روی فرم قرار میدی به صورت friend هستش که فقط توی یه پروژه قابل استفاده هستش نه چند تا پروژه

مرسی دوست عزیز درست شد :بوس:

poorman
پنج شنبه 16 آبان 1392, 03:34 صبح
یه مشکل دیگه :گریه:
الان اشیاء رو پابلیک کردم درست شد ، اما مثلا وقتی میخوام مقدار یک تکس باکس رو ران تایم چک کنم نمیتونم به مقداری که در همون لحظه داره دسترسی داشته باشم ... مقداری رو برمیگردونه که توی دیزاین فرم تعریف شده
یا هر شی دیگه ، فقط خصوصیات زمان دیزاین رو اجازه میده که چک کنی یا تغییر بدی
من نیاز دارم وقتی داره با فرم کار میشه ، خصوصیات اشیاء رو چک کنم و نسبت به اون کد بنویسم

poorman
پنج شنبه 16 آبان 1392, 19:03 عصر
دوباره سلام

کلا کار کردن با این فرم های child و DLL صبر ایوب میخواد !!!

من الان یه نمونه گذاشتم
یک فرم child رو باز میکنم ، بعدش میبندم
دوباره که میخوام باز کنم پیام خطا میده

برای اینکه پیام خطا نده باید وقتی فرم رو باز میکنم New تعریف کنم
اما وقتی New تعریف میکنم دیگه نمیتونم مقدار ران تایم اشیاء فرم رو داشته باشم

xxnagin
پنج شنبه 16 آبان 1392, 20:48 عصر
باید از WithEvents استفاده بکنی در بالای فرم

poorman
پنج شنبه 16 آبان 1392, 23:46 عصر
فک کنم نتونستم منظورم رو درست برسونم
این یک پروژه دیگه که از DLL استفاده کردم
و 2 تا مشکل پیش میاد ، اگه new تعریف کنم فرم رو نمیتونم به مقدار ران تایم دسترسی داشته باشم
اگه new تعریف نکنم فرم رو ، فقط میشه یک بار بازش کرد

هر کدوم از این مشکل ها حل بشه کار من راه میفته !!!

poorman
پنج شنبه 23 آبان 1392, 01:05 صبح
سلام
دوستان من هنوز مشکلم حل نشده ، همینطوری موندم چکار کنم :افسرده::افسرده::افسرده:

دوباره سوالم رو مطرح میکنم ، من اگر فرم فرزند رو داخل کدهای دکمه ، new تعریف کنم نمیتونم از داخل فرم اصلی مقداری که برفرض تکس باکس در زمان اجرا داره رو بدست بیارم
اگر فرم فرزند رو new تعریف نکنم ، به مقادیر اشیاء میشه دسترسی داشت ، اما یک بار که فرم بسته میشه بار دوم پیام خطا میده

خواهشا هرکسی میدونه راه حل چیه کمک کنه
هر راهی که به ذهنم رسیده امتحان کردم
تنها راهی که جواب میده ولی خیلی زمانبر هست اینه که برای هر شی متغیر عمومی تعریف کنم و مقدار رو به اون بدم و از اون بخونم
ولی اینطوری حدود 40-50 تا متغیر میشه

نمونه پروژه هم توی پست قبلی گذاشتم ، لطف کنین یه نگاهی بندازین ، ممنون :بوس:

negative60
پنج شنبه 23 آبان 1392, 01:57 صبح
فک کنم نتونستم منظورم رو درست برسونم
این یک پروژه دیگه که از DLL استفاده کردم
و 2 تا مشکل پیش میاد ، اگه new تعریف کنم فرم رو نمیتونم به مقدار ران تایم دسترسی داشته باشم
اگه new تعریف نکنم فرم رو ، فقط میشه یک بار بازش کرد

هر کدوم از این مشکل ها حل بشه کار من راه میفته !!!

اولاً نياز نيست تابع InitializeComponent توی فرم پروژه dll رو به صورت پاپليک تعريف کنيد تو همون کلاس فرم از رويداد new صداش بزنيد و ديگه نيازی نيست بعد از هر بار که يه کلاس از اين dll سخته شد اين تابه صدا زده بشه



Private Sub New()
Me.InitializeComponent()
End Sub


دوم اينکه شما توی فرم برنامه اصلی يه متغير از نوع کلاس dll برنامه به نام f تعريف کرديد اما هيج جای پروژه اون رو مقدار دهی نکرديد مشکلتون هم به خاطر همين هست
اين دليل نميشه که توی رويداد دکمه add يه متغير به نام f تعريف کرديد پس متغيری هم که توی جنرال فرم تعريف کرديد مقدار دهی ميشه اين کاملاً اشتباه هست اين دو با اينکه اسمشون هر دو f هست اما از هم جدا هستند و به هم ربطی ندارند

توی رويداد دکمه add بعد از اينکه از کلاس dll يک new ساختيد متغير جنرال رو برابر با اون قرار بديد تا مشکلتون حل بشه

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim NewForm As New ClassLibrary1.frm
NewForm.MdiParent = Me
NewForm.Show()
f = NewForm
End Sub

poorman
پنج شنبه 23 آبان 1392, 16:15 عصر
سلام
خیلی ممنون دوست عزیز
مشکل دقیقا همینجا بود که بهش توجه نکرده بودم