PDA

View Full Version : انتقال مقدار در 2 فرم



SYSMAN
یک شنبه 02 مرداد 1384, 17:44 عصر
من 2 تا فرم دارم به این صورت هم کد نویسی شدن:
فرم1:
Public int As Integer = 4000
Private Sub Form1_Load(…)
TextBox1.Text = int
End Sub

Private Sub Button1_Click(…)
Dim frm As New Form2
If frm.ShowDialog = DialogResult.OK Then
TextBox1.Text = frm.TextBox1.Text
int = frm.TextBox1.Text
End If
End Sub
فرم2:
Private Sub Form2_Load(…)
Dim frmMain As New Form1
TextBox1.Text = frmMain.int
End Sub
به عنوان مثال فرم 2 رو لود می کنم و داخل جعبه متن اون مقدار50 رو قرار می دهم و دکمه ok رو میزنم
مقدار جعبه متن فرم1 برابر 50 می شه ولی وقتی دوباره فرم 2 رو لود می کنم باز هم مقدار 4000 نمایش داده می شه!!!

SYSMAN
دوشنبه 03 مرداد 1384, 19:15 عصر
این همه عالم و فاضل کسی تا حالا با این مشکل برخورد نکرده

mehrdotnet
دوشنبه 03 مرداد 1384, 19:17 عصر
سلام
آقا با عرض شرمندگی سوالتون یه خورده نا مفهومه یا من گیجم نمی فهمم. یه چیزی تو نظرم هست ولی نمی دونم همونه که مورد نظر شما است یا نه اگه می شه لطف کنین یه کمی بیشتر و واضح تر توضیح بدین شاید بتونم کمکتون کنم
باز هم شرمنده از گیج بازیم

SYSMAN
دوشنبه 03 مرداد 1384, 19:34 عصر
حتما
دو تا فرم داریم تو فرم1 یک متغییر داریم مثلا" int =10 بعدش فرم 2 رو لود می کنیم اونجا مقدار int از فرم1 رو قرار میدیم 15 وقتی فرم 2 رو می بندیم مقدار int برابر 15 هست ولی وقتی دوباره فرم 2 رو لود می کنیم مقدار int رو برابر 10 نمایش می ده!

مشخص شد یا باز هم توضیح بدم.

mehrdotnet
دوشنبه 03 مرداد 1384, 21:42 عصر
باز هم سلام
مشکلتون رو فهمیدم. دلیلش اینه که شما دارین فرم1 رو با دستور Dim frmMain As New Form1 دوباره می سازین این کار باعث می شه که Form1 مجددا

ساخته بشه و ساخته شدن مجدد همانا و 4000 شدن int همانا. شما باید به یه جور دیگه ای Form1 رو برای Form2 ارسال کنین. این هم کاری نداره موقع

ساخته شدن Form2 این قابلیت وجود داره که بوسیله متد سازنده (Constructor Method) یعنی New یک شی رو (هر شیی حتی فرم پدر) را برای فرم

جدید ارسال کنیم برای این کار کدتون رو طبق مراحل زیر تغییر بدین :

1- به Form2 بروید و ابتدا توی Form2 اول فرم بعد از Inherits یک متغیر کمکی از نوع Form1 تعریف کنین (فقط تعریف بدون New)



Dim frmMain As Form1


2- حالا باید Sub New رو با یک پارامتر Overload کنین برای این کار توی همون Form2 ،
قسمت Windows Form Designer generated code را باز کنید و Sub New را پیدا کرده و یک کپی از اون بگیرین
و زیر همون Sub New بعد از End Sub جایگزین(Paste) کنین عنوان Sub را به صورت زیر ویرایش کنید :



Public Sub New(ByVal i As Form1)


3- توی Sub New جدیدی که نوشتید بعد از MyBase.New اضافه کنید :



frmMain = i


با این کار بدون اینکه Form1 دوباره ساخته بشه با frmMain به اون دسترسی دارین.

4- قسمت Dim frmMain As New Form1 که خودتون تو Form2_Load نوشتین رو حذفش کنید تا دوباره فرم ساخته نشه.

همین. حالا برنامه رو تست کنین. من تست کردم جواب داد.
اولش هم همینا رو می خواستم بگم ولی فکر کردم منظورتون چیز دیگه است.
اگه نشد بگین تا کل کد تغییر داده شده را بذارم. اگر هم شد بگین که دیگه مطمئن بشم و بی خیالش بشم.
باز هم حاضرم تا وقتی حل بشه روش کار کنم اگه نشد بگو !! نگی یه موقع بچه های برنامه نویس بی معرفتند!!!!!

SYSMAN
سه شنبه 04 مرداد 1384, 01:20 صبح
باز هم عمل نکرد

SYSMAN
سه شنبه 04 مرداد 1384, 12:30 عصر
دمه معرفتت گرم.
نمی شه از کلاس استفاده کرد؟

titbasoft
سه شنبه 04 مرداد 1384, 12:39 عصر
یا متغیرتون رو public shared تعریف کنید. یا متغیر public تون رو توی یک module بزارید
اطلاعات بیشتر در مورد shared Keyword : http://www.barnamenevis.org/forum/showthread.php?t=18491 لطفا به پست چهارم توجه کنید

mehrdotnet
سه شنبه 04 مرداد 1384, 13:19 عصر
بابا کی می گه روش من جواب نمی ده. کدهایی که اول مبحث نوشتی و جواب نمی داد دوباره بنویس بعد به روشی که گفتم تصحیحش کن جواب می ده.
مشکل تو New کردن فرم1 به جان خودم!!
من همین کار رو کردم و جواب گرفتم. ولی اگه خواستی می تونی از ماژول (همانطور که titbasoft عزیز گفته) استفاده کنی. اما اگه یه روزی خواستی C# بنویسی دیگه ماژول نداری. پس (به نظر من) ماژول راه نرمالی نیست.
کدهایی که گفتم یه بار دیگه امتحان کن می شه جون تو!! یه جایی داری اشتباه می کنی.

SYSMAN
سه شنبه 04 مرداد 1384, 18:01 عصر
انجام دادم ولی جواب نمی ده با کلاس و shared خیلی راحت حل شد
ممنون

mehrdotnet
سه شنبه 04 مرداد 1384, 19:24 عصر
خوب خدا را شکر موفق باشید