PDA

View Full Version : گرفتن مقدار متغیر از ماژول



programmermp
جمعه 03 شهریور 1385, 19:33 عصر
با سلام

من یک فرم دارم که توی اون یک label هست و فرم دیگری نیز وجود داره که یک label داره حالا

من می خوام وقتی فرم دوم باز می شه مقدار label فرم اول در دومی قرار بگیره

می خواهم از ماژول استفاده کنم یعنی مقدار label فرم اولی رو در یک متغیر در ماژول قرار

بدم و در همون ماژول مقدار label فرم دوم رو برابر مقدار متغیر مورد نظر بکنم اما

هر کاری می کنم ماژول اصلا مقدار label فرم اول رو نمی خونه

اگه کمکم کنید ممنون می شم

با تشکر فراوان

ghafoori
جمعه 03 شهریور 1385, 20:08 عصر
دوست عزیز این سوال بارها پرسیده شده این هفته حداقل دوبار پرسیده شده کمی جستجو می کردید این صفحه اطلاعاتی در این رابطه به شما می دهد
http://www.barnamenevis.org/forum/showthread.php?t=51164

هر کاری می کنم ماژول اصلا مقدار label فرم اول رو نمی خونه
کنترلها در فرم بطور معمول بصورت friend تعریف می شوند که در این صورت نمیتوان از کلاسهای دیگر به ان دسترسی پیدا کرد شما باید خاصیت modifir را به Public تغییر دهید تا درست بشود

programmermp
جمعه 03 شهریور 1385, 21:22 عصر
با سلام


در ضمن لینک هایی رو هم که داده بودید دیدم ولی همانطور که گفتید

نمی شه از کنترل های موجود در فرم ها در ماژول ها استفاده کرد

کجا باید این خاصیت رو پیدا کنم و تغییر بدم

لطف کنید یک خورده بیشتر توضیح بدهید

با تشکر

programmermp
جمعه 03 شهریور 1385, 22:17 عصر
با سلام

کد زیر رو نگاه کنید ببینید اشکال از کجاست توی فرم 35 هیچی نشون نمی ده ولی اطلاعات

رو از فرم 34 می خونه در ضمن تابع frm34 رو در فرم 34 از توی ماژول فراخوانی می کنم در کد زیر :

اگر در تابع frm34 یک msgbox(x) بگذاریم مقدار x رو نشون می ده ولی در فرم 35 هیچی نشون داده نمی شه

Module Module1
Dim x, y, z AsString
Sub f()
Dim f As Form34 = Form34.ActiveForm
x = f.Label1.Text()
y = f.lblun.Text()
z = f.lbluser.Text()
EndSub
Sub frm34()
f()
Dim f1 AsNew Form35
f1.Label1.Text = x
f1.lblun.Text = y
f1.lbluser.Text = z
EndSub
EndModule

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

ghafoori
شنبه 04 شهریور 1385, 08:12 صبح
خاصیت modifiers را می توانید از پنجره properties تغییر دهید کنترلهایی که می خواهید مقدار انها را بخوانید یا بنویسید این خاصیتشون را از حالت friend به public تغییر دهید تا مشکلتون حل شود

programmermp
شنبه 04 شهریور 1385, 09:11 صبح
با سلام

در ضمن در مورد سئوال فوق کارهایی که گفته بودید رو انجام دادم ولی بازهم جواب نمی ده

من دو تا فرم دارم از توی فرم اول فرم دومی را باز می کنم و فرم اول بسته نیست باید باز

باشه یعنی هم فرم اول بازه و هم فرم دوم . سپس در یک تکست باکس در فرم دوم مقداری رو می نویسم و می خوام با زدن

دکمه برگشت مقدار تکست باکس به تکست باکس موجود در فرم اول منتقل بشه و فرم دوم

بسته بشه

این کارهایی که شما گفتید رو انجام دادم ولی این عمل صورت نمی گیره

با تشکر

ghafoori
شنبه 04 شهریور 1385, 09:31 صبح
این برنامه رو ببین من این را طبق گفته شما نوشتم ببین کارت را راه می اندازد4760

mahshab14
شنبه 04 شهریور 1385, 10:38 صبح
اگه با vb کار میکنی باید از فرم مادر استفاده کنی.

programmermp
شنبه 04 شهریور 1385, 15:56 عصر
با تشکر از شما آقای ghafoori

مشکل اولا حل شد

ولی سئوال دومم در باره ماژول رو جواب ندادید

سئوال من این بود که من در یک فرم 3 تا label دارم که می خواهم آنها در همه فرم ها نشان

داده شوند برای این کار راه منطقی اینه که از یک ماژول استفاده کنیم و در آن یک تابع set

برای گرفتن اطلاعات از فرم اول ( اطلاعات 3 تا label) و یک تابع get برای قرار دادن اطلاعات

در فرم دیگر بنویسیم من برای گرفتن اطلاعات از فرم اول مشکلی ندارم ولی برای

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

نمی شه خاصیت modifier مربوط به label ها رو هم public کردم ولی باز نشد

کد مربوطه به صورت زیر هست

Module Module1
Dim x, y, z AsString
Sub f()
Dim f As Form34 = Form34.ActiveForm
x = f.Label1.Text()
y = f.lblun.Text()
z = f.lbluser.Text()
EndSub
Sub frm34()
f()
Dim f1 AsNew Form35
f1.Label1.Text = x
f1.lblun.Text = y
f1.lbluser.Text = z
EndSub
EndModule

البته این نکته رو هم بگم که تاپیکی که قبلا معرفی کردید رو دیدم ولی فقط در اونجا گفته

شده بود در ماژول از دو تا تابع برای گرفتن و نوشتن اطلاعات استفاده کنم ولی نگفته بود

به چه صورت

اگه امکانش هست من رو راهنمایی کنید

با تشکر فراوان

ghafoori
شنبه 04 شهریور 1385, 16:46 عصر
راه منطقی اینه که از یک ماژول استفاده کنیم و در آن یک تابع set

برای گرفتن اطلاعات از فرم اول ( اطلاعات 3 تا label) و یک تابع get برای قرار دادن اطلاعات

در فرم دیگر بنویسیم

دوست عزیز این راه حل منطقی نیست راه حل پر دردسر است راه حل منطقی این است که شما یک فرم پایه درست می کنید که شامل ان کنترلهایی که می خواهید و دو تابع حالا بقیه فرمهای
بجای اینکه از فرم پایه دات نت به ارث برسند از فرم پایه شما به ارث می رسند در این صورت همه انها دارای ان دو تابع و ان کنترلها هستند این برنامه را ببین تا بفهمی کار چطوریه
4771