PDA

View Full Version : یه مشکل با کلاس و addHandler



_behnam_
چهارشنبه 19 بهمن 1390, 13:50 عصر
سلام دوستان
اومدم از یه کلاس یه آرایه تعریف کردم
اما وقتی که رویداد هارو با AddHandler به تابع رویداد میفرستم Sender as Object فرستاده نمیشه
کد زیر
Dim X(1000) As clsTCPSocket
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
X(1) = New clsTCPSocket
AddHandler X(1).DataArrival, AddressOf DataArryval
End Sub

Private Sub DataArryval(ByVal pBytes As Byte(), ByVal pLength As Long)
'

End Sub

من چطور میتونم اندیس آرایه رو بدست بیارم :-؟

Hossis
چهارشنبه 19 بهمن 1390, 15:36 عصر
فکر کنم باید قسمت دوم رو این طوری اصلاح کنید

Private Sub DataArryval(Sender as Object,ByVal pBytes As Byte(), ByVal pLength As Long)
'

End Sub

_behnam_
چهارشنبه 19 بهمن 1390, 15:45 عصر
فکر کنم باید قسمت دوم رو این طوری اصلاح کنید

Private Sub DataArryval(Sender as Object,ByVal pBytes As Byte(), ByVal pLength As Long)
'

End Sub

نه!
اینجوری هم اررور میده، امتحان کردم

Hasibsoft
چهارشنبه 19 بهمن 1390, 16:04 عصر
اگر کلاس clsTCPSocket را خودتان نوشتید باید در تعریف رویداد موردن نظرتان پارامتر sender را نیز اضاغه نماییدو برای ایجاد رویداد به صورت زیر عمل کنید
RaiseEvent DataArryval(me,pBytes,pLength)

shadi khanum
چهارشنبه 19 بهمن 1390, 21:46 عصر
فک کنم شما احتمالا VB6 کار هستین که آرایه ای از کنترل دارید :) به هر حال ببین اگه میخوای که توی رویدادت ایندکس اون شی که این رویداد واسش اتفاق افتاده رو داشته باشی به اون کلاس clsTCPSocket یه property اضافه کن به اسم ایندکس و وقتی داری اون ها رو new میکنی و به آرایه add میکنی ، ایندکس اون خونه آرایه که این شی رو میذاری توش بریز تو property ایندکس همون شی و همچنین رویدادتون رو جوری نغییر بدید که این sender رو هم بفرستید.. حالا توی رویداد مورد نظر با نوشتن ctype(sende , clsTCPSocket).index میتونید ایندکس خونه آرایش رو هم بدست بیارید
موفق باشی

_behnam_
جمعه 21 بهمن 1390, 13:09 عصر
دقیقا!
VB6 کار بودم و مدت کمی هست که VB6 رو رها کردم و به دات نت رو اوردم.
ولی چون در اصل کارم برنامه نویسی سوکت و شبکه هستش توی سوکت نویسی دات نت مشکل دارم


فک کنم شما احتمالا VB6 کار هستین که آرایه ای از کنترل دارید :)

اگه واسه کاری که مدنظر من هست راه بهتری وجود داره . راهنمایی کنید ممنون میشم

فرید نجفلو
جمعه 21 بهمن 1390, 13:49 عصر
اگر کلاس clsTCPSocket را خودتان نوشتید باید در تعریف رویداد موردن نظرتان پارامتر sender را نیز اضاغه نماییدو برای ایجاد رویداد به صورت زیر عمل کنید
RaiseEvent DataArryval(me,pBytes,pLength)


من هم موافقم

ویه پیشنهاد دیگه

بااحتمال زیاد 1000 برای شما همش بدرد نمی خوره فقط به عنوان جا نگهدار استفاده میکنید که هم حافظتون رو هدر می ده هم انعطافش کمتره اگه تعداد آرایه شد 1002 یهارور تو ران تایم پیش می یاد!




PrivateX As New List(Of clsTCPSocket)



PrivateSub Form1_Load(ByValsender As System.Object,ByVal e AsSystem.EventArgs) HandlesMyBase.Load




Dim x1 As NewclsTCPSocket




AddHandler X(1).DataArrival, AddressOf DataArryval

X.Add(x1)
EndSub





PrivateSub DataArryval(Sender AsObject, ByValpBytes As Byte(),ByVal pLength AsLong)




Dim Index As Integer = X.IndexOf(Sender)




If Index <> -1 Then




'Sender is a member of X




End If




EndSub

shadi khanum
جمعه 21 بهمن 1390, 14:36 عصر
اگه واسه کاری که مدنظر من هست راه بهتری وجود داره . راهنمایی کنید ممنون میشم
وست عزیز شما دقیقا نگفتی چی مد نظرته و واسه چی میخوای کنترل هات توی آرایه باشن؟ در ضمن من که توی پست قبلی گفتم اگه میخوای توی اون رویدادتون ایندکس خونه اون کنترل رو داشته باشی چیکار کنی..

_behnam_
جمعه 21 بهمن 1390, 15:14 عصر
وست عزیز شما دقیقا نگفتی چی مد نظرته و واسه چی میخوای کنترل هات توی آرایه باشن؟ در ضمن من که توی پست قبلی گفتم اگه میخوای توی اون رویدادتون ایندکس خونه اون کنترل رو داشته باشی چیکار کنی..
بزار کامل بگم
ببینید من دارم واسه کافینت نرمافزار مینویسم، با توجه به اینکه دیگه ویژوال بیسیک 6 کار نمیکنم میخوام با دات نت بنویسم، توی کد نویسی برنامه مشکلی ندارم
تنها مشکلم یه کلاس سوکت خوب هست و اینک ما چطور از سرور چندید پورت رو گوش به زنگ کنیم واسه اتصال چندید کلاینت. البته چندتا رو امتحان کردم اما اون چیزی که میخواستم دقیق نمیشدن،

فرید نجفلو
جمعه 21 بهمن 1390, 16:13 عصر
بزار کامل بگم
ببینید من دارم واسه کافینت نرمافزار مینویسم، با توجه به اینکه دیگه ویژوال بیسیک 6 کار نمیکنم میخوام با دات نت بنویسم، توی کد نویسی برنامه مشکلی ندارم
تنها مشکلم یه کلاس سوکت خوب هست و اینک ما چطور از سرور چندید پورت رو گوش به زنگ کنیم واسه اتصال چندید کلاینت. البته چندتا رو امتحان کردم اما اون چیزی که میخواستم دقیق نمیشدن،

واسه این کا باید بحث Remoting رو پیگیری کنی
من خودم یه چیزی واسه خودم پیاده کردم با کارکرد های زیر ببینید اگه به کار شما هم مربوطه هر کمکی از دستم بر بیاد در خدمتم:
برنامه من یه چیزیه شبیه به remote Desktop (البته ادعای TeamViewer بازی رو ندارم ها!:چشمک:)
یه برنامه تو کامپیوتر خودمه یه برنامه جدا تو اون یکی که باید یه عکس از صفحه مورد نظر هنگام در خواست من برام بفرسته
منم تو کامپیوتر خودم اگه موس رو تصویر حرکت یا کلیک کنم(اگه سایز عکس من با ریزولیشن اون یکی نباشه تبدیلات انجام می شه) یا دکمهای رو فشار بدم سمت دیگه همون کار رو انجام بده(با API) !
و جدا از صفحه می تونم درایو هاشو بگردم و فایل بگیرم یا بفرستم واسش(یوزر Remote متوجه نمی شه)
...

_behnam_
جمعه 21 بهمن 1390, 16:36 عصر
قابلیت مالتی کلاینت داره؟
یه کلاس یا dll اماده واسه این کار ندارید؟ آخه من اصلا آشنایی با سوکت دات نت ندارم :ناراحت:
یه یه آموزش بدید که خوب آموزش بده آخه چنتا دیدم خوب نبودن

ممنون

فرید نجفلو
جمعه 21 بهمن 1390, 16:54 عصر
این برنامه شما تو سیستم کلاینت چه اهدافی داره؟
چی کا واستون باید بکنه؟

_behnam_
جمعه 21 بهمن 1390, 17:02 عصر
امکانات که هرچه بیش بهتر ,دیدن مانیتور با عکس ،ارسال اطلاعات و ....
اما من فعلا مشکلم همین اتصال بین سرور و کلاینت ها هست. میتونید یه نمونه بزارید که قابلیت مالتی کلاینت داشته باشه؟ :-؟
فقط کانکت بشن همین