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

أمر RaiseEvent

مغلق
بدأه MMA_EG_Cairo في 3 يوليو 2007 · 42 رد · 3,246 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني الكرام ، تحية طيبة وبعد ،

أنا قمت بتصميم مكتبة Dll تحتوي علي نموذج وكائن Class !!

الكائن Class يحتوي علي حدث MoveRecord ، وهذا الحدث يحتوي علي باراميتر

واحد SQLString !

قمت بعد ذلك بإنشاء إجراء تحت إسم ShowForm !!

من الطبيعي أنني أقوم بتنفيذ حدث MoveRecord قبل عرض النموذج كما يلي :

Public Sub ShowForm()

RaiseEvent MoveRecord(strSql)

frm.Show 1

End Sub

المطلوب ، تنفيذ هذا الحدث من داخل النموذج نفسة ، بحيث أن يمكنني تنفيذة أكثر من مرة عند ضغط المستخدم علي زر معين ؟

أرجو أن أكون وضحت لكما سؤالي ، وعلي العموم سأرفق لكم مثال بسيط يوضع ما أنا أرغب فيه

وشكراً

____.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#2

بسم الله

المشكلة دي انا واقع فيها بقالي مده ومش عارفلها حل والله

كنت بعمل برضو مكتبة بتعمل MsgBox جديد بشكل جديد يعني واللي وقفني انه ازاي اعمل حدث على Command في الفورم اللي في المكتبة

نفس طلبك نقريبا

انا اسف على ردي الغير مفيد لكن علشان افعل الموضوع علشان حد يهتم

#3

بصراحة وأنا كذلك ، وقمت بالدخول علي عديد من المنتديات ولم أحد يعرف حل هذا السؤال .

وأتمني أن أجد حل في هذا المنتدي المميز

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

أظن انه يجب عليك تعريف حدث عند استعمالك للكلاس

مثلا

Private WithEvents mMoveRecord As Class1

ثم استدعؤه عند تحيل الفورم

والله أعلم

تم تعديل هذه المشاركة بواسطة DreamNet في 4 يوليو 2007 في 12:35

#5

بسم الله

الاخ العزيز DreamNet

استدعاء الحدث مع تحميل الفورم سهل . المشكلة بعد تحميل الفورم

انه مثلا يكون الحدث مع ضغط على زر في الفورم

#7

بسم الله

اعتقد اني لم اوضح المطلوب بصورة جيدة

بص يا عزيزي انت ممكن تعمل الحدث اللي انت عايزة في اي مكان وفي اي وقت في الفورم ولكن ..

اذا كان ما تريد هو الحدث الذي سيقوم به المستخدم والذي لا تعرفه انت كمبرمج

مثال

لو هنعمل مكتبة عبارة عن MessageBox يعني هيبقى بصورة جديدة غير المعروفة

هنحط مجموعة من الازرار وهتبقى Ok , Cancel , Yes , No على سبيل المثال

انت مش عارف المبرمج اللي هيستخدم المكتبة دي هيعمل ايه على كل زرار

يعني مثلا هو هيعمل رسالة للسؤال عن الخروج من البرنامج يبقى عند الضغط على على Yes يقوم بانهاء البرنامج

ازاي هحط امر مجهول بالنسبة ليا على الزرار

فكرت في طريقة وهي اني احط قيم لكل زرار يعني مثلا Yes هياخد القيمة 1 و No هياخد القيمة 2

وبالتالي المبرمج هيحط في الدالة اللي بيكتبها انه لو القيمة الفلانية بتساوي 1 انهي البرنامج

وهنا حدثت المشكلة الفورم بيتعرف على القيمة دي عند تحميلة فقط يعني عند ظهور الــ MessageBox الخاص بيك فقط

وبعدين عند الضغط على اي من الازرار Yes او No او Ok لا يتعرف على القيمة وبالتالي لا يقوم باي شيء

ارجو اني اكون وضحت المشكلة وياريت يكون عندك حل واسف للاطالة

#8

بالنسبة للسؤال الاساسي في هذه المشاركة يمكن عمل نفس هذا الحدث في الفورم وعند الضغط على زر معين اعمل اطلاق لهذا الحدث بعد ذلك عرف الفئة كما يلي

private  withevents myform   as   form1
Private Sub myform_MoveRecord()
RaiseEvent MoveRecord
End Sub

Public Sub ShowForm()

RaiseEvent MoveRecord(strSql)



 Set myform = New Form1

myform.Show 1
 Set myform = nothing

End Sub

وهذا هو المطلوب

#9

أخي DreamNet ،

أنا بعرض النموذج كديالوج

frm.Show 1

والمطلوب بالضبط هو كما وضحة لك الأخ Amir Imam

وشكراً لك

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#10

السلام عليكم ورحمة الله وبركاته

حسب مافهمت منك أخ أمير فالمشكل يكمن في خصائص الفورم الذي يستم انشاؤه

يمكن عمل خصائص داخل الكلاس واذا أردنا أن تكون هاته الخصائص لها قيم ابتدائية نسند لها تلك القيم تحت Sub Class_Initialize()

يعني عند انشاء الكلاس سيتم مباشرة وضع قيم محددة لخصائص معينة تكون ثايتة كما يمكن تغييرها

والله أعلم

#11

إخواني الكرام ، أنا آسف عما أقولة لكم ، فلن أحد يفهم ما أقصدة سوي الآخ Amit Imam ، وأنا حتي الآن لم أجد حل لهذه المشكلة .

أخي TareqVB ، الكود الذي أرفقتة هو الذي أنا أعمل به الآن ، فيطلق الحدث مرة واحدة أثناء النقر علي زر الأمر ، وبعدها ياتم فتح نافذة كديالوج ( Form1.Show 1 ) !!

لكن المشكلة بعد فتح النموذج ، أنا أرغب في وضع زر أمر علي النموذج الديالوج يقوم بتنفيذ الحدث كل مرة يتم النقر فيه علي زر معين بالديالوج زاتة . وينفذ حدث العميل نفسة

أتمني أن أكون قادر علي توضيح سؤالي

وشكراً علي إهتمامك

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#12

نعم اخي انا فاهم ماذا تريد لكن الظاهر ان تنفيذ الفكرة السابقة لم يصل اليك او لم يكن واضحا .

والفكرة كانت هي ان تقوم بتعريف حدث في الفئة و اخر في الفورم وعند الضغط على زر الفورم يطلق الحدث وبعد ذلك يتم الاستجابة للحدث في الفئة وبدوره يقوم باطلاق حدث الفئة .

وضعت سابقا الكود في ال Class والان ساضع الكود في الفورم

Public Event MoveRecord()

Private Sub Command1_Click()
RaiseEvent MoveRecord
End Sub

مع اضافة الباراميتر

#13

بالأعتماد على Collection يمكن رفع الحدث من خارج الـ Class أنا سبق و سألت السؤال ده , بعون الله هعملك مثال بأقرب وقت.

#14

أخي الكريم ، أنا آسف جداً علي عدم فهي لك من أول مرة ،

وشكراً جداً جداً جداً ...............................................

فسأقول لك الحقيقة الآن ، هذه الطريقة قالها لي إحدي أصدقائي ، ولكنني حاولت الكثير لتجربتها

ولم تفلح معي سوي بعد إرشاداتك لي.

ولكي تعم الفائدة سأرفق مثال للجميع

وشكراً مرة أخري علي هذه المعلومة القيمة

وجزاء الله كل الخيرات ، وجعلها في ميزان حسناتك

RaiseEvent.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#15

أخي الكريم ، أنا آسف جداً أني قمت بفتح الموضوع مرة أخري ، ولكن لي عزر !

أنا قمت بإنشاء 2 نموذج وفئة واحدة بالمشروع ، وعند تنفيذ الحدث ينفذ عادي !

ولكن عند فصل نموذج الديالوج والفئة ووضعه بملف DLL ، ومحاولة إستخدامه في مشروع جديد

لا ينفذ الحدث نهائياً

فما هو السبب ، هل هناك خطأ قمت به ؟ وإذا كان هناك حل ، فممكن مثال ؟

وشكراً كثيراً ، وآسف علي فتح الموضوع مرة أخري ؟

مع الشكر

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#16

المفروض لا فرق بين مشروع عادي او مكتبة لكن يمكن الخطأ بسبب

اولا انك لم تستخدم withevetns في المشروع exe مثلا

Private WithEvents myform As frmDialog

ثانيا في خصائص مشروع المكتبة dll توجد خاصية unattended execution يجب ازالة الصح عنها (افتراضيا بلا صح )

افحص الامرين واذا لم تحرز نتيجة سارسل لك المشروع

#17

أخي الكريم ، تحية طيبة وبعد ،

أنا إستخدمت أمر :

Private WidtEvents myForm as frmDialog

أما الخاصية unattended execution فوجدتها غير معلمة .

مع العلم أن المكتبة تحتوي علي عدة نماذج ، وفي هذه الحالة تكون هذه الخاصية غير معلمة

فما هي المشكلة إذاً

ياريت ترفقلي المثال

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#18

انظر المثال المرفق

ddd.rar

وشغل

project2

وتأكد من صحة

Referecne

لملف المكتبة

تم تعديل هذه المشاركة بواسطة TareqVB في 13 يوليو 2007 في 14:14

#19

أخي الكريم ، أشكرك كثيراً علي إستجابتك لي ،

ولكن المشكلة تزال موجودة !!

1- قم بفتح Project2.

2- قم بالدخول علي كود النموذج Form1.

3- ستري بأنني قمت بإضافة الكود التالي :

Private Sub Myform_MoveRecord(SQL As String)

SQL = "XXXX"

End Sub

4- هذا الكود لا يتم تنفيذة من داخل النموذج المفتوح بـال DLL .

المطلوب :

كيف يتم تنفيذ هذا الحدث من داخل الـ DLL أثناء تنفيذ النموذج الخاص .

وأشكرك كثيراً علي إهتمامك لي

أخوك مصطفي

_______.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#20

هذا ما كنت اخشى انك تحاول عمله !!! :s

والسبب ان الاحداث لا يمكن الرجوع بها الى خلف ان جاز التعبير فهي باتجاه واحد لكن لحل هذه المشكلة يمكنك استخدام دالة عادية تقوم بتنفيذ الامر بها مثل

Private Sub Myform_MoveRecord(SQL As String)

MyForm.executeSQL "XXXX"

End Sub

وعرف هذه الدالة في الفئة والفورم كما عرفت الحدث من قبل

#21

أخي الكريم ، تحية طيبة وبعد ،

الكلام الذي قلته صحيح 100% ، ولكن لماذا تم تنفيذ الكود معي بمشروع جديد من نوع

Standerd EXE ، وياريت توضحلي بمثال عملي لإيجاد حل جزري لهذه المشكلة

التي لم يتم حلها معي منذ تقريباً 3 شهور

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#22

بصراحة أخي انا بأعرف متغير عام في النموذج كده :

Public X As Byte

واجي في حدث النقر على Command 1 واكتب :

X = 1

وفي الكلاس مثلاً :

Select Case X
case 1:msgbox"You Clicked On The Exit Button,Do You Want To EXIT ?"
case2 : 
case3 :

وهكذا

ويمكن التحكم في الحدث عن طريق هذ الرقم

مثلا لو في دالة ... تعود بقيمة X واسمها XFunction أقوم اكتب

If XFunction = 1 Then Msgbox "You Clicked On The Exit Button,Do You Want To EXIT ?"

ارجو ان تكون الطريقة عجبتك ان شاء الله

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#23

كما قلت لك من قبل هذه الطريقة لا تنفع وهي ايضا لم تنفع في حالة Standard Exe حيث انتقلت القيمة لانك عرفت متغير عام StrSql وهو الذي قام بنقل القيمة وليس الحدث كما تتصور .

#25

أشكرك أخي الكريم علي هذه الآداه الجميلة ،

لكن موضوعي متعلق ببناء DLL ، وليس OCX ،

وشكراً مرة أخري .

----------------------------------------------------------

أخي TareqVB الكريم ، لو ألقيت نظرة علي الكود الذي أرفقتة من قبل ، تجدد أنني لا أستخدم

متغير عام .

علي العموم ، ليست هذه المشكلة ، بل مشكلتي الحقيقية هي حل هذا الموضوع بأي شكل من الأشكال

وأتمني مساعدتك ومساعدة الجميع

وشكراً لك وللجميع ، وآسف جداً علي الإزعاج

مع الشكر

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

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

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