PDA

View Full Version : Rais evenet و add handler در dll



maxvel
دوشنبه 25 فروردین 1393, 02:04 صبح
سلام

من يا تايمر توي dll خودم دارم كه هر 1ثانيه مقدار يك string رو تغيير ميده

حالا ميخوام هر دفعه كه تغيير كرد مقدارش رو توي فرمم دريافت كنم

در dll هايي نظير jabber-net ديدم كه هر وقت xml از سرور به dll ارسال ميشه اونو ميتوني با گذاشتن يك كد addhandler دريافت كني در همان زماني كه xml به dll ميرسه!!!!

لطفا كمك كنيد

Mani_rf
دوشنبه 25 فروردین 1393, 09:31 صبح
اگر اون مقدار String رو به عنوان Property تعریف کنی، میتونی زمان Set شدن مقدار به اون هر Event که خودت نوشتی و می خوای رو Raise کنی. درباره Property ها و نحوه نوشتن Event ها جستجو کن مثال زیاد گفته شده.

maxvel
دوشنبه 25 فروردین 1393, 18:21 عصر
خيلي ممنون مدير بخش

اگه ميشه يه مثال ساده برام بزنيد! چون هيچ اطلاعي در مورد اينگونه كد ندارم

2روز هست كه تو گوگل سرچ ميزنم اما نتيجه نميگيرم چون اصلا نميدونم چي هست

يه لطفي بكنيد

ممنون

Mani_rf
سه شنبه 26 فروردین 1393, 09:06 صبح
2تا Event تعریف کردم و موقع خواندن و ست کردن Property اونها رو Raise کردم




Public Class Sample


Public Event OnGetValue(Value As String)
Public Event OnSetValue(OldValue As String)




Private _TestProp As String
Public Property TestProp As String
Get
RaiseEvent OnGetValue(_TestProp)
Return _TestProp
End Get
Set(value As String)
RaiseEvent OnSetValue(_TestProp)
_TestProp = value
End Set
End Property












End Class

mmbguide
جمعه 01 بهمن 1395, 15:15 عصر
سلام.

من کمی با این RaiseEvent مشکل دارم و متوجه عملکردش نمیشم. من می خوام یک DLL بسازم و به Reference برنامم اضافه کنم. این کلاس تو خودش یک فرم رو برای انجام کاری نمایش میده. حالا برنامه اصلی من که این DLL رو اجرا میکنه چطور میتونه متوجه یک Event داخل DLL بشه و یک مقدار برگشتی هم دریافت کنه؟

ممنون میشم کمی با جزئیات بیشتر راهنمایی کنید.

mmbguide
جمعه 01 بهمن 1395, 15:57 عصر
کدهای موجود در کلاس


Public Shared WithEvents frm As Form
Public Shared Event _AlertClick(ByVal AlertID As Long)


Public Shadows Sub AlertClick()
RaiseEvent _AlertClick(AlertID)
End Sub




کد موجود در برنامه اصلی


Dim WithEvents a As New HMGH_Alert.HMGH_Alert


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim aa As String = "Test"
a.ShowAlert(CLng(Now.Second), aa, , , , HMGH_Alert_Position.TopRight, HMGH_Alert_ExitAnimation.ShrinkVertically)
AddHandler a.AlertClick, AddressOf CheckAlertID
End Sub


Sub CheckAlertID()
MsgBox("Clicked")
End Sub




اما زیر عبارت AddHandler a.AlertClick خط قرمز کشیده و مینویسه Expression Dose not produce a value.

نکته بعدی اینه که اگر بخوام تو همان a.ShowAlert نام CheckAlertID رو تعیین کنم باید چکار کنم.

ممنون

mmbguide
جمعه 01 بهمن 1395, 15:59 عصر
آیا لزومی داره که متغیرها بصورت WithEvents تعریف بشند یا نه

mmbguide
جمعه 01 بهمن 1395, 16:46 عصر
با تغییر زیر جواب گرفتم


Sub CheckAlertID(ByVal ID As Long) Handles a._AlertClick
MsgBox(ID)
End Sub