الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Events in classes

مغلق
بدأه hossam2525 في 29 مايو 2007 · 12 رد · 888 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندى سؤال بسيط كيف يمكن استخدام events الخاصة باداة فى class

مثلا انا باستخدم winsock

وكتبت فى الكود الكلاس

dim Txsock as winsock

كيف يمكن استخدام ال events الخاصة بال winsock فى الكلاس

زى مثلا data arrival-connection request

لكن تكون خاصة بال Txsock

يعنى اعمل اداة جديدة ولكن باحداثها

يعنى اكنها موجودة بالظبط ولكن انا معرفها من الكود

وشكرا للجميع

#2

واضح من سؤالك أن عايز تعمل Wrapper لتسهيل العمل على الأداة.

لو كان ظنى بمحله يبقى عمل Usercontrol كـ Wrapper أسهل من الـ Classes لأن الـ Usercontrol بتقبل أدوات عليها.

أو الأفضل فى رأيى لكن أصعب هو كتابة الأداة دون الأعتماد على أداة الـ Winsock أى بأستخدام الـ APIs و هنا بقى تعملها Class أو Control براحتك , مثال : WinsockLib

أما لو أصريت على أستعمال الأداة بتاعة MS ففى حاجة مش كلنا نعرفها و هى أمكانية أضافة الأداة دى ( زى غيرها ) كـ Reference و بعدين فى الكلاس نكتب :

Private WithEvents Txsock As MSWinsockLib.Winsock

Private Sub Class_Initialize()
Set Txsock = New MSWinsockLib.Winsock
End Sub

دلوقتى هتلاقى Object جديد بالكلاس أسمه Txsock و تقدر توصل لأحداثة بسهولة بمجرد أختياره من الـ Combo بتاعت الـ Objects بأعلى نافذة الكود و أحداثة من الـ Procedure Combo اللى جنبها.

تعديل : آسف على أخطاء الكتابة , أنا عدلت على قد ما قدرت.

تم تعديل هذه المشاركة بواسطة msayed2004 في 29 مايو 2007 في 19:37

#3

بطريقة مناداة event دى اقدر استخدم الاداة بس لازم احمل ال lib من componat

هل تشتغل ع الكلاس زى اكنها موجودة بالظبط على usercontrol

وانى اقدر اعرف من برنامج اداة winsock وpass لل class

زى كدا

public function setConnection (byval vSock as winsock)

بحيث ان function دى فى ال كلاس

وبنادى عليها من module مثلا او من البرنامج وادخل لها winsock وترجع بال setting اللى انا عايزها مع event طبعا

فهل ينفع الكلام دا ولا اعمل class لل winsock من جديد

#4

أنا آسف مفهمش حاجة من ردك الأخير , برجاء التوضيح.

لاحظ أنى قلت أضافة الـ MSWINSCK.OCX كـ Reference مش كـ Control يعنى من قائمة Project ثم References

أما عن أنشاء Connection فالـ Connect عبارة عن Sub يبقى نوصل له بـ Sub تانى , زى :

Public Sub SetTxSockConnection(Host As String, Port As Long)
Txsock.Connect Host, Port
End Sub
#5

انا اسف

اقولك عاللى عايز اعمله

انا بابدل user control ب dll

انا الكنترول اللى كنت عامله ممكن يتحول ل dll ولكن المشكلة فى winsock بال events بتاعتها

\فكنت عاوز اعمل زى انشاء لل winsock فى ال active x بس احتاج انى ادخل ip,port من البرنامج يقوم بال function من activexdll

ويتصل ويرسل البيانالت اللى عاطيها بدون اى استخدام للwinsock من البرنامج الاساسى

او ممكن اعمل زى كدا

دا فى الكلاس

public function setconn (byval sock as winsock)
sock.connect xx,yy
end function

ولو مثلا فى الفورم او المديول اعرف كلاس جديد\ة

dim s as new clsconn

واندى عليها كالاتى الاول ارفق اداة winsock واسمها tcpsockme

s.setconn tcpsockme

ارجوا انى وضحت فكرتى الان وشكرا يامحمد والله انت باشا

#6

بس المشكلة دلوقتى فى events

اعملها ازاى

دا كمان ناويت احول controlls ل lib ومعرفتش عشان ال events

#7
اقتباس
بس المشكلة دلوقتى فى events

اعملها ازاى

تقصد زى كده :

Option Explicit
Public Event MyTxsockError(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

Private WithEvents Txsock As MSWinsockLib.Winsock

Private Sub Class_Initialize()
Set Txsock = New MSWinsockLib.Winsock
End Sub

Private Sub Txsock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
RaiseEvent MyTxsockError(Number, Description, Scode, Source, HelpFile, HelpContext, CancelDisplay)
End Sub
#8

انا قصدى ان الاداة winsock ماتكونش موجودة فى البنامج الاساسى

واكون عاملها loaded فى classبحيث انها تشتغل من class فقط

بادخال ip,port من البرنامج الاساسى فى function معينة

و ال winsock تتصل من الكلاس وترسل البيانات منها وتستقبل ولكن كل هذا مشكلته الوحيدة events

مع connection request -data arrival

هل بالطريقة اللى فاتت بتحميل lib referance اقدر اشغلها فى الكلاس

ولا العملية كدا حتكون صعبة

ولا مش حتنفع

#9

أنت هتعمل الكلاس اللى فيها الـ Reference للأداة فقط أما الأداة فمش هتحطها كـ Component أساسا لأنك مش محتاجها ( لكن طبعا لازم تبقى موجودة فى مجلد النظام ).

#10

يعنى طريقة ال withevent ممكن تنفع اجربها الاول

واشوف اللى حيحصل وشكرا ياباشا الف الف شكر

#11

ال lib مش عارف اوصلها من referances ولو ادخلتها من system32 يطلع error

ممكن بس تشوف الكود اللى انا كتبته

فى class

Option Explicit
private WithEvents Txsock As MSWinsockLib.Winsock


Public Sub connectMe(Ip As String, port As Long)
Txsock.connect Ip, port
End Sub

Private Sub Class_Initialize()
Set Txsock = New MSWinsockLib.Winsock
الكود دا فيه error عشان ال lib مش موجودة

End Sub

فى المديول

dim sx as new clssock

sub main

x.connectMe "127.0.0.1", 1801

end sub

وظهر error بيقول

object variable or with block variable is not set

تم تعديل هذه المشاركة بواسطة hossam2525 في 30 مايو 2007 في 01:38

#12

من قائمة Project أختر References ثم Browse ثم أختر MSWINSCK.OCX ثم OK

#13

100 100 يامحمد باشا

الطريقة كان ناقصها فعلا الخطوة دى انا بدل لما احمل ال ocx حملت dll lib عشان كدا ظهر error

وشكرا ليك الف شكر ياحبيبى

تم تعديل هذه المشاركة بواسطة hossam2525 في 30 مايو 2007 في 11:45

هذا الموضوع مغلق.

مواضيع مشابهة