PDA

View Full Version : دلیل عدم فراخوانی رویداد در Sub New



reza6384
یک شنبه 31 شهریور 1387, 01:04 صبح
سلام.

من امشب بعد از کلی سرو کله زدن با کامپیوتر که هی فکر می کردم یه جای کار ایراد داره . مثلا با کد زیر :



Public Class Class1

Dim Withevents _Status as new Label

Public Event StatusChanged(...............)

Private Sub Status_TextChanged(.........) Handles _Status.TextChanged
RaiseEvent StatusChanged(.......)
End Sub

Sub New()
Me._Status.Text = "Running Sub New() "
End Sub

Sub Initialize()
Me._Status.Text = "Running Initialize Sub() "
End Sub
End Class


و نتیجه ای که بهش رسیدم اینه که در New هیچ رویدادی فراخوانی نمیشه ، نمی دونم چرا. ولی اگر Sub Initialize رو اجرا کنیم ، این رویداد فراخوانی میشه. در ضمن حتی اگر Initialize رو در درون New صدا کنیم، بازهم هیچ رویدادی فراخوانی نمیشه.

حالا، میشه یه نفر بگه چرا اینجوریه؟

ممنونم.

reza6384
دوشنبه 01 مهر 1387, 19:33 عصر
کسی جواب سوال من رو نمی دونه ؟ یا اینکه تا حالا به این مورد برخورد نکرده؟ یک متغیر WithEvents در کلاستون تعریف کنید و در Sub New اونرو تغییر بدید. بعد از درون یک کلاس دیگه یک New Object از کلاس اول بسازید، ولی چیزی که می بینید اینه که رویداد تغییر کردن اون عضو فراخوانی نمیشه. چرا ؟

mostafaaa
دوشنبه 01 مهر 1387, 20:49 عصر
من تست کردم . مشکلی ندیدم .
با این کد

Public Class Form1
Public Class Test
Public WithEvents str As New Label
Sub New()
str.Text = "Running Sub New() "
End Sub
End Class
Dim WithEvents NewTest As New Test
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Label1.Text = NewTest.str.Text
End Sub
End Class

mostafaaa
دوشنبه 01 مهر 1387, 21:01 عصر
راستی به جای اینکه توی کلاست یه شی لیبل بسازی که کلی Event و متد داره میتونی به راحتی واسه کلاست Event درست کنی . به این مثال توجه کن.

Public Class SampleClass
Public Event StatusChanged As EventHandler
Dim strStatus As String
Public Property Status() As String
Get
Return strStatus
End Get
Set(ByVal value As String)
strStatus = value
RaiseEvent StatusChanged(Me, New EventArgs())
End Set
End Property
Public Sub DoWork()
Status = "Start"
For i As Integer = 0 To 100000000

Next
Status = "Step 1"
For i As Integer = 0 To 100000000

Next
Status = "Step 2"
For i As Integer = 0 To 100000000

Next
Status = "Complete"
End Sub

reza6384
دوشنبه 01 مهر 1387, 23:43 عصر
خیلی ممنون آقا مصطفی. ولی من منظورم این بود که از اون کلاس یه آبجکت تعریف کنی و ببینی که بیرون کلاس Event فراخوانی نمیشه. یه کم گنگه. در هر صورت ممنون از راهنماییت.