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

تنفيذ حدث في Form

مغلق
بدأه Ahmed H. Alawady في 18 يوليو 2005 · 22 رد · 1,543 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

يوجد لدي أثنين من Form تم إنشائهما في مشروع خاص بهما أحد الفرمين به زرار لفتح الفورم الآخر

وتم أخذ المشروع على هيئة DLL إلى مشروع آخر

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

وبالنسبة للفورم الآخر الذي يتم فتحة من الفورم الأول المفروض أن ينفذ كود في الفورم الجديد بالمشروع الجديد

وهذا بالطبع شرح مبسط لفكرة البرنامج .

فكيف ذلك وأرجوا الإهتمام والمساعدة

وجزاكم الله خيرا

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 18 يوليو 2005 في 20:33

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#2

ألا من مساعد

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#3

اخى الفكره مش واضحه ...ممكن تفسر اكتر

#4

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

اعذرني يا أخ أحمد .... أنا برده مش فاهم حاجه خالص :blink:.

بس من الواضح كدا ان OOP Design مش متظبط.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#5

تقؤيباً فهمت ماذا تقصد :unsure:

بالنسبة للكود الذي تريد تنفيذه في الفورم الجديد فيمكنك أن تقوم بـ Overriding للـ Methods في الفورم الأصلي و من ثم تستخدمها في الفورم الجديد بكل سلاسة...

رأس الحكمة الإيمان بالله

#6

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

أشكركم جميعا على الإهتمام بالرد على الموضوع والمساعدة

وأنا متأسف لعدم توضيح الفكرة أبسط من ذلك

1- المشكلة ألا وهي يوجد لدي فورم قمت بتصميمها بداخل مشروع مستقل لأنه سوف يكون الفورم الأساسي لجميع شغلي بحيث أعمل توريث من أي مشروع لهذا DLL بحيث أني إذا غيرت بالمشروع الأول الذي يخرج DLL يتم تغير بقية المشاريع التي ترث منها .

2- في المشروع الأول الذي يخرج DLL فروم آخر يتم فتحة من خلال الفورم الأول ولقد قمت بهذه الطريقة لأن فتح الفورم الثاني سوف يعمم أيضا على جميع مشاريعي فلكي لا أكرر فتح هذا الفورم الثاني في كل مشروع أو في كل فورم من فورم المشاريع الأخرى فثبته مع الفورم الذي يورث من أي مشروع والذي يخرج ملف DLL

3- ولكن هذا الفورم الثاني به زرار حفظ مثلا ولكن هذا الزرار يقوم بعملية مختلفة داخل أي فورم ترث من هذا DLL

4- فهل عند الضغط على الزرار يتم تفعيل الحدث الموجود بالـ DLL ولا يقوم بتفعيل الحدث الموجود بالـفورم المعروضة حاليا

5- طريقة Override يمكن إستخدامها مع الفورم الأول الذي يورث لبقية الفورم بالمشاريع الجديدة لأنهم أصبحوا فورم واحد ولكن الفورم الثاني لا لأنه يتم فتحة مستقل بذاته

الشرح أفضل

أني صممت فورمين بداخل مشروع DLL ليقوم بتوريث أحد الفورمين في بقية المشاريع

مع العلم أن هذا الفورم الذي يورث يقوم بعرض وفتح الفورم الآخر

ولكن الفورم الآخر المفروض أن يقوم بتنفيذ كود مخصص لكل شاشة يتم فتحها بداخل المشاريع الجديدة

وجزاكم الله خيرا

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 19 يوليو 2005 في 15:17

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#7

أرجوا المساعدة القصوى

وجزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#8

مشكلتك هذه يا أخ أحمد هى المشكله التي من أجلها تم عمل الـ Virtual Methods.

الحل الصحيح تماما هو كما قاله الأخ محمد في الأعلى ::

اقتباس
بالنسبة للكود الذي تريد تنفيذه في الفورم الجديد فيمكنك أن تقوم بـ Overriding للـ Methods في الفورم الأصلي و من ثم تستخدمها في الفورم الجديد بكل سلاسة...

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#9

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

أخي الكريم معتز باشا والأخ الكريم محمد باشا

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

لماذا ؟ لأنه عند عمل توريث يكون الفورم الأول والجديد أصبحوا فورم واحد فيمكن عمل كود Override للجديد يتم تفعيلة مكان القديم

أما الذي أريدة فإن الفورم الآخر الذي قمت بشرحة ألا وهو الفورم الثاني هو فورم لا يقوم بتوريثة لأي فورم

وهو فورم منفصل ولكن بنفس DLL وليس له أي علاقة بالفورم الجديد على الإطلاق أي أنه له Class مختلف عن الجديد عن Class المخصص للفورم الأول دعنا نأخذ مثال توضيحي

1- يوجد لدينا فورم تم توحيد شكلة مثلا بأرضية ثابتة وسوف يتم توريثة للمشاريع كلها

2- وتم وضع زر خاص لهذا الفورم لفتح فورم آخر به زر حفظ وكل هذا في مشروع خاص به

3- تم عمل هذه الفكرة لأن الفورم الأول والزر الموجود به والفورم الثاني يتكررون في جميع المشاريع

4- فتم عمل مشروع لإستخراج DLL لنقوم بالتوريث منه ويكون عندي مشروع خارجي سهل التغيير به في أي وقت

5- عند إنشاء مشروع جديد وتم عمل التوريث للفورم الأول وبه الزر المثبت به والذي من المفروض عند الضغط عليه يقوم بفتح الفورم الثاني الموجود بنفس DLL وهنا يمكننا كما تقولون أن نستخدم Override للزر لأنه أصبح أيضا موجود بالفورم الجديد الذي يرث من الفورم الأول لأنهم أصبحوا بالفعل فورم واحد وأحدهم يرث من الآخر

6- أما بالنسبة للفورم الثاني منفصل لا أحد يرث منه وهو أيضا لا يري أي شئ من المشاريع الجديدة لأنه موجود فقط ب DLL ولا أحد يرث منه

7- فكيف عند الضغط على زر حفظ بهذا الفورم الثاني يقوم بحفظ الموجود بالفورم الجديد مع العلم سوف يتم عمل أكثر من فورم لذلك الغرض وزرار حفظ بالفورم الثاني المفروض عند كل فورم يقوم بحفظ الموجود به

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

وجزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#10
اقتباس
فكيف عند الضغط على زر حفظ بهذا الفورم الثاني يقوم بحفظ الموجود بالفورم الجديد مع العلم سوف يتم عمل أكثر من فورم لذلك الغرض وزرار حفظ بالفورم الثاني المفروض عند كل فورم يقوم بحفظ الموجود به

في الفورم الأصلية التي سترث منها، قم بتحديد خاصية الـ Modifiers لكل control تود استخدامه الى Protected، بهذه الطريقة سوف تستطيع أن تحدد لكل Button موجود في فورم موروثه الوظيفة التي سيقوم بها، و لا تنسى أن تقوم بعملية الـ ReBuild بعدما تقوم بتحديد الـ Modifiers من الـ Properties window..

و أيضاً لكي تستطيع أن تستخدم أي دالة موجودة في الفورم الأصلية و تريد استخدامها في الفورم الموروثة فعرفها في الفورم الأصلية بـ protected virtual

protected virtual string SayHello()
  {
 	 string str = MessageBox.Show("Hello").ToString();
 	 return str;
  }

و عند استخدامها في الفورم الموروثة فيمكنك استدعائها بهذه الطريقة:

protected override string SayHello()
  {
 	 return anyThingElse();
  }

أرجو أن يكون هذا ما تقصده....

رأس الحكمة الإيمان بالله

#11

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

أعز الله قدركم جميعا ، أنا متأكد أنني لم أستطع الشرح بالطريقة الصحيحة

ولذلك قمت بعمل مشروع صغير فيه الفكرة التي أريدها

يوجد مشروعين أحدهما والذي اسمه test وهو الذي به فورمين ويتم إخراج DLL

المشروع الآخر الذي يرث من المشروع السابق وبه فورمين على سبيل المثال وكل منهما مختلف عن الآخر وله عملة الخاص

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

وجزاكم الله خيرا

test.rar

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#12

أخي الفاضل، راجع مشاركتي الأخيرة.... ففيها الحل الذي تريده بإذن الله...

رأس الحكمة الإيمان بالله

#13

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

أخي الفاضل محمد عبد العليم

كلامك صحيح والله بس في حالة إذا كنت أرث من هذا الفورم ولكني لا أرث منه أصلا

فكيف أستخدم Override إذا كنت بالفعل لا أستخدم الكلاس المخصص للفورم

فالكلام صحيح في حالة الفورم الأول الذي أرث منه ولكن هذا فورم آخر لا أرث منه شئ على الإطلاق

أرجوا مشاهدة المشروع الذي صممتة وحل المشكلة بالمشروع إن أمكن وإرسالة لي مرة أخرى

وجزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#14
محمد عبد العليم كتب:
في الفورم الأصلية التي سترث منها، قم بتحديد خاصية الـ Modifiers لكل control تود استخدامه الى Protected، بهذه الطريقة سوف تستطيع أن تحدد لكل Button موجود في فورم موروثه الوظيفة التي سيقوم بها، و لا تنسى أن تقوم بعملية الـ ReBuild بعدما تقوم بتحديد الـ Modifiers من الـ Properties window..

و أيضاً لكي تستطيع أن تستخدم أي دالة موجودة في الفورم الأصلية و تريد استخدامها في الفورم الموروثة فعرفها في الفورم الأصلية بـ

و عند استخدامها في الفورم الموروثة فيمكنك استدعائها بهذه الطريقة:

تصديقا لكلامي لو تلاحظ يا أخي كل كلامك عن كلمة (الموروثة، سترث ، الفور الأصلية )

ما الفورم التي أريد التعامل معها فهي لا أرث منها وإنما هي فورم مستقلة يتم إستدعائها من DLL

وجزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#15
اقتباس
ما الفورم التي أريد التعامل معها فهي لا أرث منها وإنما هي فورم مستقلة يتم إستدعائها من DLL

حسناً أخي الفاضل.... كيف قمت بتحويل الفورم الـى DLL?? هل استخدمت الـ Visual Inheritance أما ماذا بالضبط؟؟

تم تعديل هذه المشاركة بواسطة محمد عبد العليم في 20 يوليو 2005 في 14:19

رأس الحكمة الإيمان بالله

#16

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

أستاذي الفاضل أعز الله قدرك ممكن تطلع على الملف المرفق عاليه

يوجد فورم بها زر حفظ وهي يتم فتحها في كل شاشة أريد عند الضغط عليها تحفظ مكونات الشاشة أين كانت الطريقة المقصود أنها تقدر تحدد الشاشة وتتعامل معاه

وجزاك الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#17

أخي الفاضل، حمل المثال..... مع العلم ان الحل هو ما اقترحته من قبل.........

إقرأ قليلاً في الـ OOP خاصةً الـ Polymorphism ..

لقد قمت بعمل ما يسمى بالـ Visual Inheritance دون أن تدري و في هذه الحالة تتعامل مع الفورم الجديدة (أو الـ DLL) على انها كلاس موروث، بمعنى ان الـ virtual methods هي أنسب حل لهذه الحالة...

test.rar

رأس الحكمة الإيمان بالله

#18

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

يا جماعة الخير الموضوع أوبجكت اوريانتد بحت هل من مساعد

الموضوع بجد مهم جدا

جزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#19

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

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

جزاك الله خيرا

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 20 يوليو 2005 في 17:08

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#20

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

أستاذي الفاضل محمد باشا عبد العليم

أكرر كلامي وسيادتك مُصّر على كلامك

كلامك ياباشا صحيح 100000000% والتعديل صحيح ولكني لا أريد تغير الكود الموجود في زرار Show

ولكن اريد أن أتركة وشأنه يقوم بفتح الشاشة الثانية والتي بها زرار Save

وأريد أن أتعامل مع هذا الزرار اللى قارفنا وهو Save في الفورم الفعال

مثال : بالضبط مثل Toolbar الموجود به زرار حفظ وآخر حذف وآخر جديد وخلافة لجميع الفورم بالمشروع ككل

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

أرجوا أن أكون أوضحت هذه المرة

وجزاك الله خيرا

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 20 يوليو 2005 في 17:07

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#21

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

ألا يوجد من مساعد

عندي رأي في حل المشكلة ولكن لا أعلم الكود لأستخدامة

أولا معرفة الفورم الفعالة الحالية وعرفة إسمها

ثانيا محاولة إستدعاء Method بداخل Class المخصص للـ Form الفعالة

أرجوا الإهتمام

وجزاكم الله خيرا

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#22

السلام على من اتبع الهدى ورحمة الله وبركاته

إخواني الأعزاء أخواتي العزيزات طبتم وطاب ممشاكم وتبؤتم من الجنة منزلا

بعد البحث والإطلاع على المشكلة السابقة والتي أرفقت معها المشروع السابق والذي قام بتعديل صحيح فيه الأستاذ محمد عبد العليم

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

لقد وجدت حل المشكلة التي طرحتها في التوري بطريقة Interface

1- بقد قمت بإنشاء ملف به Interface ويسمى الملف بـ ISave وهو أيضا نفس إسم Interface

2- قمت بتوريث الفورم الذي اريد حفظ ما به بالـ Interface

3- في الفورم الذي أرث منه والذي به زرار العرض Show عندما يعرض الفورم الآخر الذي به زرار حفظ Save قمت بإرسال متغير به إسم الكلاس الذي قام بفتح هذا الفورم لإستخدامة لاحقا

4- عند الضغط على زرار حفظ طبعا لدينا أوبجكت من الكلاس الذي إستدعى هذا الفورم الحالي والذي به زرار حفظ

قمت بعمل Cast للكلاس لتحويلة إلى ISave ثم إستدعيت إسم الدالة الموجودة بالـ Interface والذي بدورة يقوم بإستدعاء الدالة الموجودة بالفورم الأصلى الذي إستدعى الفورم الحالي الذي به زرار حفظ

أنا عندي إحساس إن الشرح ملخبط مش عارف ليه بس للتوضيح المشروع موجود بالمرفقات وأي إستفسار أنا تحت الطلب والأمر

جزاكم الله خيرا

test.rar

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#23

وهذا مثال توضيحي من كتاب تعلم السي شارب في 21 يوم لجزء Interface

1: // Shape.cs -
2: //--------------------------------------------------------------------
3:
4: using System;
5:
6: public interface IShape
7: {
8: double Area();
9: double Circumference();
10: int Sides();
11: }
12:
13: public class Circle : IShape
14: {
15: public int x;
16: public int y;
17: public double radius;
18: private const float PI = 3.14159F;
19:
20: public double Area()
21: {
22: double theArea;
23: theArea = PI * radius * radius;
24: return theArea;
25: }
26:
27: public double Circumference()
28: {
29: return ((double) (2 * PI * radius));
30: }
31:
32: public int Sides()
33: {
34: return 1;
35: }
36:
37: public Circle()
38: {
39: x = 0;
40: y = 0;
41: radius = 0.0;
42: }
43: }
44:
45: public class Square : IShape
46: {
47: public int side;
48:
49: public double Area()
50: {
51: return ((double) (side * side));
52: }
53:
54: public double Circumference()
55: {
56: return ((double) (4 * side));
57: }
58:
59: public int Sides()
60: {
61: return 4;
62: }
63:
64: public Square()
65: {
66: side = 0;
67: }
68: }
69:
70: public class Shape
71: {
72: public static void Main()
73: {
74: Circle myCircle = new Circle();
75: myCircle.radius = 5;
76:
77: Square mySquare = new Square();
78: mySquare.side = 4;
79:
80: Console.WriteLine(“Displaying Circle information:”);
81: displayInfo(myCircle);
82:
83: Console.WriteLine(“\nDisplaying Square information:”);
84: displayInfo(mySquare);
85: }
86:
87: static void displayInfo( IShape myShape )
88: {
89: Console.WriteLine(“Area: {0}”, myShape.Area());
90: Console.WriteLine(“Sides: {0}”, myShape.Sides());
91: Console.WriteLine(“Circumference: {0}”, myShape.Circumference());
92: }
93: }

والناتج هو

Displaying Circle information:
Area: 78.5397529602051
Sides: 1
Circumference: 31.415901184082
Displaying Square information:
Area: 16
Sides: 4
Circumference: 16

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

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

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