PDA

View Full Version : سوال: ارسال متغییر ها از فرم Child به فرم child دیگر



marzban
جمعه 24 خرداد 1387, 16:25 عصر
با سلام
من یک فرم child دارم و می خواهم مقادیری را از فرم Child دیگری به فرم مورد نظرم پاس دهم و فرم مورد نظر به صورت خودکار بروز رسانی شود.برای مثال فرم Child من یک فرم جستجو است که بصورت Showdialog باز شده است و وقتی که کلیدی تایید شود مقادیر به فرم اصلی انتقال یابد و بصورت اتوماتیک و بدون زدن کلیدی در فرم Child دومی تاثیر داده شود.
من متغییر های فرم دوم را بصورت Public تعریف کرده ام ولی نمی توانم کاری کنم که وقتی فرم Child اولی بسته می شود و یا کلیدی بر روی آن زده می شود ،فرم Child دوم خود را بروز رسانی کند.
لطفا راهنمایی کنید
با تشکر مرزبان

amirsajjadi
جمعه 24 خرداد 1387, 19:06 عصر
با سلام
شما باید یک زیربرنامه (مثلا Refresh_Form) به صورت عمومی (Public) توی فرم اول بنویسی و کدهای مربوط به ، به روز رسانی رو توی اون زیربرنامه فرم اول بنویسی بعد به این صورت اونو صدا بزنی :


PrivateSub Form2_FormClosed(ByVal sender AsObject, ByVal e As System.Windows.Forms.FormClosedEventArgs) HandlesMe.FormClosed
Form1.a = 100
Form1.Refresh_Form()
EndSub

kablayi
شنبه 25 خرداد 1387, 00:08 صبح
سلام ...
راه حل اول :
شما میتونید از یه تکست باکس unvisible کمکی تو فرم اول استفاده کنید و موقع زدن کلید در فرم دوم مقادیر تکس باکس در فرم اول رو مقدار دهی کنید ...
در فرم دوم ...


Private Sub BTNOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNOK.Click
Form1.textbox1.text = txtMablagh.text
End Sub


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

در فرم اول ...


Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
' عملیات مورد نظر
End Sub



راه حل دوم ...
از این روش برای پاس کردن مقدار یک متغیر از فرمی به فرم دیگر استفاده میشود و اون استفاده از Tag می باشد...



Private Sub BTNOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNOK.Click
Form1.tag= txtMablagh.text
End Sub


حالا بایستی بعد از دستور فراخوانی فرم دوم تابعی رو صدا بزنی که فرم رو نسبت به مقدار جدید tag رفرش کنه ... چون فرم دوم شما بدلیل فراخوانی به صورت showdialog بعد از بسته شدن به یک خط بعد از دستور فراخوانی خود برمیگردد و مابقی دستورات را در فرم اول اجرا میکند ...


موفق باشید ... :چشمک:

marzban
شنبه 25 خرداد 1387, 17:17 عصر
با تشکر که سعی در کمک دارید
همچنان مشکل من پا بر جاست
من یک فرم parent دارم که در داخل آن فرم از طریق منو تعدادی فرم دیگر را بصورت MDI فراخوانی می کنم .می خواهم وقتی مقادیر را در یک فرم مثلا فرم search وارد می کنم مقادیر به فرم دیگر ارسال شود
با تشکر مرزبان

reza1357
یک شنبه 26 خرداد 1387, 07:24 صبح
من همیشه از این روش استفاده میکنم :
در فرم اول متغیری از نوع public تعریف و آن را مقدار دهی میکنم و در فرم دوم هم متغیر رو فراخنی میکنم و از محتوای ان استفاده میکنم.

marzban
یک شنبه 26 خرداد 1387, 08:04 صبح
ببینید دوستان مشکل من سر انتقال اطلاعات بین دو فرم نیست چون راههای متفاوتی برای این کار وجود دارد ولی مشکل من در این است که زمانی فرم Child 1 بسته می شود در فرم Child2 عمل Refresh انجام نمی شود.
یعنی مقادیر ارسال می شود ولی عمل نمایش مجدد اطلاعات در فرم Child2 صورت نمی گیرد.
با تشکر مرزبان

kablayi
یک شنبه 26 خرداد 1387, 12:40 عصر
سلام دوست عزیز ...
خوب شما مشکل انتقال داده به فرم دیگه رو ندارید ... اگر دقت کرده باشین عرض کردم موقع انتقال اطلاعات شما میتونید مقدار اونو تو یه تکس باکس بریزید در خاصیت TextChanged عملیات refresh رو انجام بدین ...
مثلا اگر قراره دیتاگریدتون با مقدارجدید refresh بشه خوب توی این event دوباره دیتاگریدتونو پر کنید ...

marzban
دوشنبه 27 خرداد 1387, 08:02 صبح
با سلام مجدد
مشکل اینجاست که ایونت textChange فراخوانی نمیشه
ابتدا child1 در فرم parent باز می شود ،دکمه ای در Child1 تعبیه شده است که وقتی بر روی آن کلیک می گردد Child 2 بصورت ShowDialog باز میشود.
من در داخلChild2 مقدار یا حالا هرچیزی مثلا یک رشته را در داخل textbox موجود در Child1 وارد می کنم(Child1 هنوز باز است و من در Child2 یک object از فرم Child1 را ساخته ام ) و child2 را می بندم تا محتویات داخل Child1 را ببینم.
حالا نمیدونم مشکل سر چی هست.
لطفا راهنمایی کنید

marzban
دوشنبه 27 خرداد 1387, 08:12 صبح
staff_form
در فرم Child1


Private Sub CMnu_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CMnu_search.Click
Dim search As New staff_search
search.ShowDialog()
End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
masgbox("Hi")
End Sub


staff_search
حالا در فرم Child2



Private Sub TSB_start_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_start_search.Click
Dim frm As New FRM_insert_staff
textbox1.text="text"
frm.refresh
Me.Close()
End Sub

kablayi
دوشنبه 27 خرداد 1387, 10:45 صبح
سلام ...
در فرم child1


Private Sub CMnu_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CMnu_search.Click
search.ShowDialog()
End Sub

' از این ایونت برای کار رفرش استفاده کنید
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
msgbox("Hi")
End Sub


در فرم child2 :(سرچ)


Private Sub TSB_start_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSB_start_search.Click
child1.textbox1.text="text" ' محتویات تکست باکس رو اینجوری پر کنید مقدار تکس باکس درون فرم زیری رو با این مقدار پر میکنی ...
Me.Close()
End Sub



البته نمی دونم منظورتون همین بوده یا نه ...
ببخشید ...
موفق باشید ...

marzban
سه شنبه 28 خرداد 1387, 13:08 عصر
با تشکر از راهنمایی شما.
مشکلم حل شد ولی مشکل دیگری در همین زمینه برام به وجود اومده.وقتی من از msgbox استفاده میکنم مشکلی نیست ولی وقتی می خواهم فرم اصلی من به یک tab برای مثال tabpage مربوط به لیست برود باز مشکل پابرجاست .
dataset من هم پر هست یعنی مقدار مربوطه خودش را از خروجی یک کلاس میگیره


Private Sub TextBox100_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox100.TextChanged

TabControl1.SelectTab(2)
Dim search_DA_layer As New field_not_conectional
Dim ds As New DataSet
ds = search_DA_layer.search_form(table_name, table_field_con, table_field_con_val, search_field_name, search_field_val, search_field_type, search_field_show, con, True)
DataGridView1.DataSource = ds.Tables(0)
DataGridView1.Show()

End Sub

marzban
یک شنبه 02 تیر 1387, 09:14 صبح
لطفا اگر کسی می تونه کمک کنه.
هنوز مشکل من پابر جاست.وقتی از مسیج باکس استفاده می کنم مشکلی ندارم ولی وقتی برای مثال می خواهم یک تب باکس را جابجا کنم یا مقداری را داخل یک تکست باکس بریزم(در فرم والد) نمی توانم نتیجه را ببینم حتی رفرش هم می کنم.
با تشکر
مرزبان

reza1357
یک شنبه 02 تیر 1387, 09:24 صبح
احتمالن Textbox شما یجایی بایند هست چکش کنید یا در یک Lable دیگه محتوا رو نمایش بدین ببینید درست نشون داده میشه.

marzban
یک شنبه 02 تیر 1387, 10:04 صبح
نه به جایی بایند نیست ،حتی از تگ استفاده می کنم یا اینکه یک تابع پابلیک تعریف کردم و در فرم چایلد فراخوانی اش می کنم و تنها به مسج باکس جواب میده
با تشکر
مرزبان

marzban
یک شنبه 02 تیر 1387, 10:06 صبح
من عنوان مناسبی را برای جستجو پیدا نمی کنم اگه میشه یک آدرس را جهت مطالعه مطالب مرتبط با این موضوع بهم معرفی کنید
(با عرض معذرت، حواسم نبود وگرنه مطلب قبلی ام را ویرایش می کردم)
با تشکر

reza1357
یک شنبه 02 تیر 1387, 10:12 صبح
یک کار دیگه بکنید.
یک متغییر رشته ای پابلیک تعریف کنید و اون رو در فرم اول مقدار دهی و در فرم دوم آن رو به Textbox بریزید از این طریق مطمئنم جواب میگیرید.