PDA

View Full Version : دسترسي به رويدادهاي فرم ديگه



mojtabadj
چهارشنبه 21 مرداد 1388, 17:04 عصر
سلام دوستان

من ميخوام از طريق داخل فرم جاري به رويدادهاي فرم ديگم دسترسي داشته باشم و براي اونا

تابع تعريف كنم و تابع من به جاي رويداد اون فرم كار كنه! بايد چي كار كنم؟

لطفا راهنماييم كنيد

kablayi
پنج شنبه 22 مرداد 1388, 03:15 صبح
میتونید یه ماژول اضافه کنید و رویدادها رو در اون بنویسید ...

mojtabadj
پنج شنبه 22 مرداد 1388, 20:32 عصر
میتونید یه ماژول اضافه کنید و رویدادها رو در اون بنویسید ...

ميدونم بايد ماژول بنويسم نميدونم چه طوري بايد رويداد فرم ديگه رو تو فرم خودم فراخواني

كنم!

اگه ميشه يك نمونه كدي در اين مورد اينجا بزارين!

با تشكر

kablayi
پنج شنبه 22 مرداد 1388, 22:36 عصر
روش اول:(زمانی که در فرم دوم رویدادی تعریف نشده باشد)
برای این کار یه instance از فرم دیگه رو در فرم جاریتون تعریف کنید به صورت زیر....


Private WithEvent MyForm as Form1

حالا میتونید برای MyForm در همین فرم جاری رویداد بنویسید...
مثلا:


PrivateSub MyForm_FormClosed(ByVal sender AsObject, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyForm.FormClosed
' do anything
EndSub

به قسمت قرمز رنگ توجه کنید ...
البته اینو هم دقت داشته باشید که به جای باز کردن form1 بایستی MyForm رو Show کنید...

روش دوم:(زمانی که در فرم دوم رویدادی تعریف شده باشد...)
در این حالت که کار ساده ست ...
فرضا در فرم1 هستید و میخواهید رویدادی رو در فرم2 صدا بزنید...


Form2.Button1.PerformClick()

در این حالت رویداد کلیک Button1 در فرم2 اجرا میشه...

mojtabadj
جمعه 23 مرداد 1388, 08:45 صبح
روش اول:(زمانی که در فرم دوم رویدادی تعریف نشده باشد)
برای این کار یه instance از فرم دیگه رو در فرم جاریتون تعریف کنید به صورت زیر....


Private WithEvent MyForm as Form1

حالا میتونید برای MyForm در همین فرم جاری رویداد بنویسید...
مثلا:


PrivateSub MyForm_FormClosed(ByVal sender AsObject, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyForm.FormClosed
' do anything
EndSub

به قسمت قرمز رنگ توجه کنید ...
البته اینو هم دقت داشته باشید که به جای باز کردن form1 بایستی MyForm رو Show کنید...

روش دوم:(زمانی که در فرم دوم رویدادی تعریف شده باشد...)
در این حالت که کار ساده ست ...
فرضا در فرم1 هستید و میخواهید رویدادی رو در فرم2 صدا بزنید...


Form2.Button1.PerformClick()

در این حالت رویداد کلیک Button1 در فرم2 اجرا میشه...

با تشكر از شما ولي فرمم WithEvent رو نميشناسه :ناراحت:

رويداد فرم ديگه رو بايد قبل از نمايشش تعريف كنم؟

mojtabadj
جمعه 23 مرداد 1388, 12:30 عصر
سلام مشكل قبلي حل شد

1-حالا اگه بخوام براي اشيايه فرم ديگه رويداد بنويسم بايد چيكار كنم؟

2- من تو فرمم يك دكمه با كد ميسازم حال براي اينكه بهش رويداد بدم بايد چيكار كنم؟

kablayi
جمعه 23 مرداد 1388, 18:51 عصر
شما هر رویدادی که بخواین میتونید در فرم خودش براش تعریف کنید و بعد هم اجراش کنید ...
اگه واضح تر بگید میخواین چیکار کنید شاید بشه راه حل مناسب تری رو پیاده سازی کرد و دیگه نیازی نباشه که بخواین از یه فزم برای یه شی تو فرم دیگری رویداد بنویسید...
ممکنه با وراثت حل بشه ...
بگین میخواین چیکار کنید...!!!!

mojtabadj
جمعه 23 مرداد 1388, 22:06 عصر
شما هر رویدادی که بخواین میتونید در فرم خودش براش تعریف کنید و بعد هم اجراش کنید ...
اگه واضح تر بگید میخواین چیکار کنید شاید بشه راه حل مناسب تری رو پیاده سازی کرد و دیگه نیازی نباشه که بخواین از یه فزم برای یه شی تو فرم دیگری رویداد بنویسید...
ممکنه با وراثت حل بشه ...
بگین میخواین چیکار کنید...!!!!

سلام

من براي مشكل دومم اين كد رو نوشتم ولي فقط دكمه آخري رويداد click رو ميشناسه

كد:



Public Sub CreateDastgah()
Friend WithEvents Btn As System.Windows.Forms.Button
Dim i As Integer = 1
Dim WSpace As Integer = 10
Dim HSpace As Integer = 10
Dim myReader As SqlDataReader
Dim iIndex As Integer
Dim State As Integer
c.ObjCon.Open()
ObjAdaptor.SelectCommand.CommandText = "select * from TDastgah order by Id"
ObjAdaptor.SelectCommand.CommandType = CommandType.Text
ObjDataset.Clear()
myReader = ObjAdaptor.SelectCommand.ExecuteReader
'ObjAdaptor.Fill(ObjDataset, "dastga")
'ObjDataview = New DataView(ObjDataset.Tables("dastga"))
iIndex = myReader.GetOrdinal("Id")
State = myReader.GetOrdinal("State")
While myReader.Read()
'MsgBox(myReader(iIndex).ToString)
Btn = New System.Windows.Forms.Button
With Btn
.Location = New System.Drawing.Point(WSpace, HSpace)
.Name = "BtnDastgah" & myReader(iIndex).ToString
.Size = New System.Drawing.Size(132, 123)
.TabIndex = i - 1
.Text = "دستگاه " & myReader(iIndex).ToString
.Tag = myReader(iIndex).ToString
.UseVisualStyleBackColor = True
.Visible = True
If myReader(State).ToString = "سالم" Then
'.BackColor = Color.LightGreen
End If
If myReader(State).ToString = "خراب" Then
'.BackColor = Color.Crimson
.Image = BerenjKobi.My.Resources.Resources.Customize
.ImageAlign = ContentAlignment.TopCenter
End If
Me.Controls.Add(Btn)
End With
WSpace = WSpace + 132 + 30
If (i Mod 3) = 0 Then
HSpace = HSpace + 123 + 30
WSpace = 10
End If
i += 1
End While
c.ObjCon.Close()
End Sub



رويداد :



Private Sub My_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn.Click
MsgBox(Btn.Tag)
End Sub

kablayi
شنبه 24 مرداد 1388, 00:50 صبح
برای تعریف رویداد برای دکمه btn که حین اجرا ساختید به صورت زیر عمل کنید...
در حلقه While اینو بنویسید...


AddHandler btn.MouseClick, AddressOf My_Click

سپس رویداد My_Click رو به صورت زیر بنویسید یعنی بدون Handles انتهایی ...


PrivateSub My_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox(Btn.Tag)
EndSub