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

استدعاء حدث معين داخل فورم آخر

بدأه الشرق الاوسط في 10 يوليو 2011 · 18 رد · 1,702 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لنتخيل بانه لدينا فورم1 وفورم2 ويوجد على فورم2 زر به امر msgbox لعرض رسالة معينه

لاستدعاء حدث لزر داخل الفورم

  Button1_Click(Me, e)

Or

  Button1_Click(Nothing, Nothing)

لاستدعاء حدث لزر داخل فورم آخر وهو فورم2

يجب ان لا يكون الحدث الموجود بفورم2 بشكل خاص Private وان يكون Friend أو عام Puplic

ثم نستدعيه بهذه الطريقه

   Form2.Button1_Click(Nothing, Nothing)

ولكن ماذا لو كان لدينا 20 فورم وهذا الحدث موجود بكل الفورم الموجوده داخل التطبيق فهل من طريقة اسهل خصوصا وانني اريد ان استبدل مكان Form2 بمتغير يدل عليها وعلى غيرها

هل يمكن استخدام Ctype لحل هذه المسئله مثال لاستخدام Ctype على ليبل

   For i = 1 To 7
            CType(Me.Controls("Label" + i.ToString), Label).Text = i.ToString
        Next

هل يمكنني استخدام Ctype مع Form ؟

وكيف ولكم جزيل الشكر

تم تعديل هذه المشاركة بواسطة الشرق الاوسط في 10 يوليو 2011 في 18:56

لايأس مع الحياة ولاحياة مع اليأس

#2

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

اخي ليش ماتوفر العتاء وتقوم بوضع الحدث في اجراء داخل Module او كاجراء Static وتقوم باستدعاءه من اي فورم اخر!!

.:: Wish to become better and better ::.

#3

اخي VB Helper

هذا الحل جميل ولكن لن يحل لي مشكلتي

ولك كل الشكر

لايأس مع الحياة ولاحياة مع اليأس

#4

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

اخي ليش لن يحل مشكلتك؟!!

.:: Wish to become better and better ::.

#5
VB Helper كتب:

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

اخي ليش لن يحل مشكلتك؟!!

اخي العزيز

سوف اغير صيغة السؤال

ماذا لو كان لدينا 20 فورم واردنا تغيير التكست الخاص بكل فورم على حده بطريقه غير تقليديه

كأن نستخدم Ctype

هذا مثال لاستخدام Ctype مع ليبل

For i = 1 To 7
            CType(Me.Controls("Label" + i.ToString), Label).Text = i.ToString
        Next

هل يمكنني استخدام Ctype مع Form بنفس الطريقه؟

بحيث يكون الفورم متغير مثل ليبل في المثال السابق

ولكم جزيل الشكر

لايأس مع الحياة ولاحياة مع اليأس

#6

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

اخي يمكنك استخدام الكود التالي


For Each frm In My.Forms
CType(frm.Controls("Label" + i.ToString), Label).Text = i.ToString
Next

.:: Wish to become better and better ::.

#7
VB Helper كتب:

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

اخي يمكنك استخدام الكود التالي


For Each frm In My.Forms
CType(frm.Controls("Label" + i.ToString), Label).Text = i.ToString
Next

أخي الكريم

انا اريد تطبيق المثال على الفورم وليس اليبل بهذا الشكل

CType(frm.Controls("Form" + i.ToString), Form).Text = i.ToString

ولكن المعالج يعطيني رسالة خطا

لايأس مع الحياة ولاحياة مع اليأس

#8

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

اخي طيب جرب الكود التالي


Dim frm As New Form
Dim formName As String = "Form1"
formName = Assembly.GetEntryAssembly.GetName.Name & "." & formName
frm = DirectCast(Assembly.GetEntryAssembly.CreateInstance(formName), Form)
MessageBox.Show(frm.Text)

.:: Wish to become better and better ::.

#9
VB Helper كتب:

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

اخي طيب جرب الكود التالي


Dim frm As New Form
Dim formName As String = "Form1"
formName = Assembly.GetEntryAssembly.GetName.Name & "." & formName
frm = DirectCast(Assembly.GetEntryAssembly.CreateInstance(formName), Form)
MessageBox.Show(frm.Text)

اخي الرائع العزيز

اشكرك جزيل الشكر على مساعدتك

جربت الكود ولكن المعالج يعطي رسالة وهي

Name 'Assembly' is not declared

كيف نقوم بتعريف Assembly

نفس المشكله حصلت معي حينما جربت الكود

For Each frm In My.Forms
   CType(frm.Controls("Label" + i.ToString), Label).Text = i.ToString
Next

المعالج اعطاني الرسالة التاليه

Expressiom is of type 'windowsapplication1.my.myproject.myforms',which is not a collection type

عملت arraylist لتجميع الفورم فهل لديك حل افضل غير ال collection

وشكرا لك

تم تعديل هذه المشاركة بواسطة الشرق الاوسط في 13 يوليو 2011 في 22:17

لايأس مع الحياة ولاحياة مع اليأس

#10

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

اخي قم بالتصريح التالي

Imports System.Reflection

.:: Wish to become better and better ::.

#11

مرحباً أخي الكريم

الفكرة التي قمت بسردها مفهومة من حيث المبدأ لكن الذي لم أفهمه بوضوح هو كيف تريد استدعاء الحدث وكيف تقوم بتحديد أي من العشرين (Forms) يجب أن تستجيب لذلك الاستدعاء؟ المقصود هل هناك مفتاح أو خاصية تعتمد عليها لتحصل على استجابة من احد النماذج العشرين المفروضة كما ذكرت؟

بالتوفيق.

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#12

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

اخي المتغير formName يحمل اسم الفورم المراد ايجاد اي اجراء او خاصية له عبر الـ Reflection!!

.:: Wish to become better and better ::.

#13
VB Helper كتب:

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

اخي المتغير formName يحمل اسم الفورم المراد ايجاد اي اجراء او خاصية له عبر الـ Reflection!!

أهلاً أخي الكريم،

أفهم ماتحاول شرحه لكن هذا الـCode يلبي حاجة الاستدعاء من جهة ثابتة أو بمعنى أخر، هل مايريده الاخ الكريم هو إرغام المستخدم على إدخال اسم النموذج أم أن هناك آلية متبعة تقوم بذلك؟ على سييل المثال يتم تحديد النموذج بواسطة احدى هذه الآليات: (النموذج الذي يملك التركيز "كما في التطبيقات متعددة الواجهات MDI" أو أخر نموذج كان لديه التركيز قبل أن ينتقل التركيز إلى النموذج الرئيسي الذي يقوم باستدعاء الحدث); هذا ماأريد الوصول إليه أولاً كي اضيف ماأفكر به بشكل وافي.

شكراً وبالتوفيق.

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#14

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

اخ بشار حسب مافهمته منه, سيقوم بعمل دوران يضيف رقم المتغير الى كلمة form ليصل للجميع ويقوم بالمطلوب!!

.:: Wish to become better and better ::.

#15
VB Helper كتب:

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

اخ بشار حسب مافهمته منه, سيقوم بعمل دوران يضيف رقم المتغير الى كلمة form ليصل للجميع ويقوم بالمطلوب!!

شكراً أخي الكريم VB Helper على التوضيح لكن حتى الأن لم اقتنع بالفكرة وذلك لأن الأحداث متتالية بالتطبيق ومتزامنة بالمعالجة فمالفرق بين استدعاء جميع تلك الأحداث وبين استدعاء إجراء واحد يقوم بمعالجة مايلزم ضمن تلك الأحداث وكماهو واضح فكرة الإجراء ابسط وتقنية أكثر من حيث المبدأ.

VB Helper كتب:

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

اخ بشار حسب مافهمته منه, سيقوم بعمل دوران يضيف رقم المتغير الى كلمة form ليصل للجميع ويقوم بالمطلوب!!

شكراً أخي الكريم VB Helper على التوضيح لكن حتى الأن لم اقتنع بالفكرة وذلك لأن الأحداث متتالية بالتطبيق ومتزامنة بالمعالجة فمالفرق بين استدعاء جميع تلك الأحداث وبين استدعاء إجراء واحد يقوم بمعالجة مايلزم ضمن تلك الأحداث وكماهو واضح فكرة الإجراء ابسط وتقنية أكثر من حيث المبدأ.

VB Helper كتب:

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

اخ بشار حسب مافهمته منه, سيقوم بعمل دوران يضيف رقم المتغير الى كلمة form ليصل للجميع ويقوم بالمطلوب!!

شكراً أخي الكريم VB Helper على التوضيح لكن حتى الأن لم اقتنع بالفكرة وذلك لأن الأحداث متتالية بالتطبيق ومتزامنة بالمعالجة فمالفرق بين استدعاء جميع تلك الأحداث وبين استدعاء إجراء واحد يقوم بمعالجة مايلزم ضمن تلك الأحداث وكماهو واضح فكرة الإجراء ابسط وتقنية أكثر من حيث المبدأ.

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#16

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

اخي بشار ذكرت هذا سابقا في اول رد لي, ولكن لا ادري ليش السائل مصر على استخدام ال CType

.:: Wish to become better and better ::.

#17
VB Helper كتب:

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

اخ بشار حسب مافهمته منه, سيقوم بعمل دوران يضيف رقم المتغير الى كلمة form ليصل للجميع ويقوم بالمطلوب!!

اخواني الخبراء

هذا بالضبط ما اريد فعله وانا فعلا اعمل على تطبيق متعدد الواجهات MDI واريد التحكم بالواجهات من حيث الفتح والاغلاق بحيث انني فقط ارسل اسم الفورم بصيغة string الى sub وهي تقوم بالتقاط الفورم وتنفيذه وكذلك اغلاق فورم آخر

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

Dim frm As Form

        For Each frm In My.Application.OpenForms
            MsgBox(frm.Text)
        Next

مشكلتي هي مع الفورم المغلق

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

هناك طريقة يدويه وهي

Dim Formsx As New ArrayList
        Formsx.Add(Me)
        Formsx.Add(Form2)
        Formsx.Add(Form3)
        Formsx.Add(Form4)
        For Each Frm In Formsx
            MsgBox(Frm.Text)
        Next

فهل من طريقة مختصرة وافضل من هذه بحيث يكون التجميع عن طريق دوران For

ولكم جزيل الشكر والتقدير

لايأس مع الحياة ولاحياة مع اليأس

#18

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

اخي لقد تم حل موضوعك في اخر رد لي, شوف المشروع في المرفق

WindowsApplication1.zip

تم تعديل هذه المشاركة بواسطة VB Helper في 14 يوليو 2011 في 15:07

.:: Wish to become better and better ::.

#19
VB Helper كتب:

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

اخي لقد تم حل موضوعك في اخر رد لي, شوف المشروع في المرفق

اخي الفاضل

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

بارك الله فيك وفي خبرتك الرائعه وكثر من امثالك

الف شكر وتحيه

لايأس مع الحياة ولاحياة مع اليأس

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