PDA

View Full Version : سوال: انتقال پارامتر در بين فرم هاي vb.net



omidquest
یک شنبه 09 مرداد 1390, 22:31 عصر
سلام خيلي گشتم ولي چيزي براي vb.net پيدا نكردم
لطفا يا مراحل انتقال پارامتر رو توي vb.net توضيح بدين يا اگر قبلا تاپيك مفيدي در اين زمينه دادين به من معرفي كنيد
ممنون

pouyansaraf
دوشنبه 10 مرداد 1390, 02:49 صبح
سلام
اگر متغیرهاتون رو از نوع Public یا Friend انتخاب کنید در فرم های دیگر میتوانید از آنها استفاده کنید
بطور مثال:
اگر در فرم2 متغیری با شرایط زیر درست کنید:

Public n1 As Integer
Friend n2 As Integer

در فرم 1 به صورت زیر میتوانید از آنها استفاده کنید:

Form2.n1 = 100
Form2.n2 = 200

omidquest
دوشنبه 10 مرداد 1390, 10:25 صبح
سلام
اولا يك دنيا ممنون از توجه شما
دوما يه مشكل من وقتي ميخوام اون متغيير هاي
Public n1 As Integer
Friend n2 As Integer
در صفحه دوم تعريف كنم يه ارور بهم ميده و ميگه بايد كلمه هاي Public و Friend رو با كلمه Dim اصلاح كنم
ممكنه بيشتر برام توضيح بدين
البته اگه بتونين يه نمونه برنامه vb.net بهم بدين كه به String رو با زدن يه دكمه از form1 به form2 منتقل كنه خيلي عالي ميشد و ديگه خيلي مزاحم شما نميشدم

Behzad_MCP
دوشنبه 10 مرداد 1390, 10:56 صبح
با سلام ، را ه حلی که دوست عزیزمون ارایه داده بودن دقیقا راه حل منطقی برای این قضیه هست ولی تا زمانی کار میکنه که Form1 که متغیرهای Public در آن تعریف شدن زنده باشه یعنی با بسته شدن یا Dispose شدن Form1 تمامی آبجکتهاش از بین میره . به نظر من اگر میخواهید آبجکتی رو از Form1 به Form2 انتقال بدهید با استفاده از Sub New در Form2 این آبجکتو مقدار دهی کنید

pouyansaraf
دوشنبه 10 مرداد 1390, 11:09 صبح
سلام
نه 100 در صد این خطا بخاطر اینه که شما دارید در روال های خود فرم مثلا FormLoad مینویسید که میگه با dim عوض کنید. مشخصه

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

در جواب دوستومون خوب اگر میخواهید با dispose کردن کار کنید میتوانید از class و یا Module استفاده کنید با یک توضیح که اگر از Module استفاده کنید در تمامی Form ها متغیر ها قابل دسترسی هستند

ولی در خیلی از مواقع ما Form هامونو Dispose نمیکنیم و نیازی به این کارا نیست

Public Class Form1
Public n1 As Integer
Friend n2 As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
End Class

omidquest
دوشنبه 10 مرداد 1390, 13:17 عصر
سلام
من براي پاس كردن مقدار از اين روشي كه گفتي استفاده كردم ولي تا وقتي كه مقدارثابت ميدم مشكل ندارم
ولي اگر بخوام مقدار متغيرم رو از يه ابجكت بگيرم به ارور زير كه عكسش رو فرستادم بر ميخورم

*** من ميخوام به صورت
Public n1 As Integer = ddl_user.SelectedValue
پارامتر رو بگيرم
و به صورت
tb_cod_user.Text = Form1.n1
برگردونم

Behzad_MCP
دوشنبه 10 مرداد 1390, 13:36 عصر
دوست عزیز آیا وقتی میخوای تکست باکس tb_cod_user را مقدار دهی کنی Form1 باز هست یا میبندیش ؟

omidquest
دوشنبه 10 مرداد 1390, 14:43 عصر
سلام
قرارع كه بعدا بسته بشه
ولي مشكل اينجاست كه اين اررور قبل از اجراي برنامه مياد
يعني به محض اينكه برنامه رو ميخوام اجرا كنم !!!!!!

Behzad_MCP
دوشنبه 10 مرداد 1390, 15:07 عصر
یکی از فیلد هارو بد جایی تعریف کردی اگه تو Error List نگاه کنی و روش دابل کلیک کنی میبینی که زیر Error خط آبی کشیده .

omidquest
دوشنبه 10 مرداد 1390, 15:18 عصر
يه زحمت ميكشي ببيني كجا باشه بهتره؟؟؟!!!!


Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'Esfahanhost_kuhsanDataSet.app_kuh_user' table. You can move, or remove it, as needed.
Me.App_kuh_userTableAdapter.Fill(Me.Esfahanhost_ku hsanDataSet.app_kuh_user)

End Sub



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Tb_xx1.Text = ddl_user.SelectedValue
''''
Try
Me.App_kuh_userTableAdapter.FillBy(Me.Esfahanhost_ kuhsanDataSet.app_kuh_user, CType(Tb_xx1.Text, Long))
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
'''''

tb_xx2.Text = ddl2.SelectedValue

If tb_xx2.Text.Trim = tb_pass.Text Then
Frm_menu.Show()
Me.Close()

Else
MsgBox("شما مجوز ورود به سيستم را نداريد", MsgBoxStyle.MsgBoxRight, "ايراد امنيتي")
Application.Exit()

End If

End Sub



Public n1 As Integer = ddl_user.SelectedValue


Private Sub FillByToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FillByToolStripButton.Click
Try
Me.App_kuh_userTableAdapter.FillBy(Me.Esfahanhost_ kuhsanDataSet.app_kuh_user, CType(Tb_xx1.Text, Long))
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try

End Sub
End Class

Behzad_MCP
دوشنبه 10 مرداد 1390, 15:36 عصر
خوب حالا دقیقا بگو که n1 را کجا میخوای استفاده کنی . ببین الان n1 از سراسر Application قابل استفاده هست ولی به شرطی که Form1 زنده باشه . آهان یه چیز دیگه n1 را هنگام تعریفش مقدار دهی نکن مثلا اگه dd1_user کمبوباکسه بیا توی رویداد SelectedValueChanged یا SelectedIndexChanged مقدار دهی بکن اونجا بنویس n1=dd1_user.SelectedValue

omidquest
دوشنبه 10 مرداد 1390, 15:40 عصر
ممنون

منظور از زنده بودن اينه كه فرم بسته نشه؟؟ اگه اينطوره فرم رو بايد Hide كنم؟؟؟

Behzad_MCP
دوشنبه 10 مرداد 1390, 15:46 عصر
آره منظورم تقریبا همونه ولی Hide کردن راه خوبی نیست اگه میخوای با پاس دادن پارامترت فرمت هم بسته بشه راه خیلی ساده ای داره استفاده از همون Sub New یا Constructorهست که اول بحث گفتم .

omidquest
دوشنبه 10 مرداد 1390, 15:52 عصر
امكانش هست اين موضوع استفاده از sub new رو بيشترتوضيح بدي و يه مثال برام بزني

Behzad_MCP
دوشنبه 10 مرداد 1390, 16:31 عصر
دوست عزیز من یه تاپیک در همید باره ایجاد کردم لطفا ببینش
http://barnamenevis.org/showthread.php?298108