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

ربط شكلين ج. إضافة النماذج. التفاعل بين الأشكال. قم بإنشاء نموذج عنصر واحد أو نموذج تفاصيل

اخر تحديث: 31.10.2015

لإضافة نموذج آخر إلى المشروع ، انقر بزر الماوس الأيمن على اسم المشروع في نافذة مستكشف الحلول وحدد إضافة (إضافة) -> نموذج Windows ...

هيا نعطي صيغة جديدةبعض الاسم ، على سبيل المثال ، Form2.cs:

لذلك ، أضفنا نموذجًا ثانيًا إلى المشروع. لنحاول الآن تنفيذ التفاعل بين الشكلين. لنفترض أن النموذج الأول سيستدعي النموذج الثاني عند النقر فوق الزر. أولاً ، دعنا نضيف زرًا إلى النموذج الأول Form1 وانقر نقرًا مزدوجًا على الزر للانتقال إلى ملف التعليمات البرمجية. لذلك ، سوف ندخل إلى معالج حدث النقر فوق الزر ، والذي يتم إنشاؤه افتراضيًا بعد النقر المزدوج على الزر:

button1_Click باطل خاص (مرسل الكائن ، EventArgs e) ()

الآن دعنا نضيف رمز الاستدعاء الخاص بالنموذج الثاني إليه. يُطلق على النموذج الثاني اسم Form2 ، لذلك نقوم أولاً بإنشاء كائن من هذه الفئة ، ثم نسمي طريقة Show لعرضها على الشاشة:

button1_Click باطل خاص (مرسل الكائن ، EventArgs e) (Form2 newForm = new Form2 () ؛ newForm.Show () ؛)

الآن لنفعل العكس - بحيث تؤثر الصورة الثانية على الأولى. بينما الشكل الثاني لا يعرف عن وجود الأول. لإصلاح ذلك ، تحتاج إلى نقل المعلومات بطريقة ما حول النموذج الأول إلى النموذج الثاني. للقيام بذلك ، سوف نستخدم تمرير رابط إلى النموذج في المنشئ.

لذلك دعنا ننتقل إلى النموذج الثاني وننتقل إلى الكود الخاص به - انقر بزر الماوس الأيمن على النموذج وحدد عرض الرمز (عرض الرمز). بينما هو فارغ ويحتوي فقط على منشئ. نظرًا لأن C # يدعم طريقة التحميل الزائد ، يمكننا إنشاء طرق متعددة ومنشئين بمعلمات مختلفة واستدعاء إحداها اعتمادًا على الموقف. لذلك ، دعونا نغير ملف الكود الخاص بالنموذج الثاني إلى ما يلي:

باستخدام النظام ؛ باستخدام System.Collections.Generic ؛ باستخدام System.ComponentModel ؛ باستخدام System.Data ؛ باستخدام System.Drawing ؛ باستخدام System.Linq ؛ باستخدام System.Text ؛ باستخدام System.hreading.Tasks ؛ باستخدام System.Windows.Forms ؛ مساحة الاسم HelloApp (فئة جزئية عامة Form2: Form (public Form2 () (InitializeComponent () ؛) public Form2 (Form1 f) (InitializeComponent () ؛ f.BackColor = Color.Yellow ؛)))

في الحقيقة ، لقد أضفنا هنا للتو منشئ جديد public Form2 (Form1 f) ، حيث نحصل على النموذج الأول ونضبط خلفيته على اللون الأصفر. الآن دعنا ننتقل إلى كود النموذج الأول ، حيث أطلقنا على النموذج الثاني وقمنا بتغييره إلى ما يلي:

Button1_Click الخاصة الفارغة (مرسل الكائن ، EventArgs e) (Form2 newForm = new Form2 (this) ؛ newForm.Show () ؛)

لأنه في هذه القضيةتمثل هذه الكلمة الأساسية إشارة إلى الكائن الحالي - كائن Form1 ، ثم عند إنشاء النموذج الثاني ، سيتلقى (الرابط) ويدير النموذج الأول من خلاله.

الآن ، بعد النقر فوق الزر ، سننشئ نموذجًا ثانيًا ، والذي سيغير لون النموذج الأول على الفور.

يمكننا أيضًا إنشاء كائنات للشكل الحالي:

زر الفراغ الخاص 1_Click (مرسل الكائن ، EventArgs e) (Form1 newForm1 = new Form1 () ؛ newForm1.Show () ؛ Form2 newForm2 = new Form2 (newForm1) ؛ newForm2.Show () ؛)

عند العمل باستخدام نماذج متعددة ، ضع في اعتبارك أن أحدها هو النموذج الرئيسي - والذي يتم تشغيله أولاً في ملف Program.cs. إذا كانت لدينا مجموعة من النماذج مفتوحة في نفس الوقت ، فعند إغلاق النموذج الرئيسي ، يتم إغلاق التطبيق بالكامل ومعه جميع الأشكال الأخرى.

إذا كان لديك نموذج طويل لعناصر متعددة ، فقد ترغب أحيانًا في التعمق سريعًا لرؤية مزيد من المعلومات حول أحد العناصر. في Access ، يتطلب ذلك إنشاء ارتباط بين نموذج متعدد العناصر ونموذج أحادي العنصر. عند تحديد عنصر في نموذج متعدد العناصر ، يفتح نموذج العنصر الفردي ويعرض تفاصيل إضافية.

ملحوظات:

إنشاء النماذج

في معظم الحالات ، يعتمد نموذجان في تكوين دقيق على نفس الجدول أو الاستعلام. إذا كان لديك بالفعل نموذجان تحتاج إلى استخدامهما (أحدهما جدول أو نموذج متعدد العناصر والآخر عنصر واحد أو نموذج تفاصيل) ، يمكنك تخطي هذا القسم. خلاف ذلك ، استخدم الإجراءات التالية لإنشائها.

قم بإنشاء نموذج جدول أو نموذج بعناصر متعددة

    في جزء التنقل ، حدد الجدول أو الاستعلام الذي يحتوي على البيانات التي تريد عرضها في نموذج جدولي.

    اختيار العناصر خلق > أشكال أخرى، وثم - عناصر متعددةأو الطاولةحسب نوع النموذج المطلوب.

    احفظ وأغلق النموذج.

لمزيد من المعلومات حول النماذج متعددة العناصر ، راجع إنشاء نموذج باستخدام أداة العناصر المتعددة.

قم بإنشاء نموذج عنصر واحد أو نموذج تفاصيل

    في جزء التنقل ، انقر فوق الجدول أو الاستعلام الذي يحتوي على البيانات التي تريد عرضها في نموذج التفاصيل. سيكون على الأرجح نفس الجدول أو الاستعلام الذي استخدمته للنموذج الأول.

    اختيار العناصر خلق > الاستمارة.

    قم بإجراء التغييرات اللازمة ، واحفظ النموذج وأغلقه.

لمزيد من المعلومات ، راجع إنشاء نموذج باستخدام أداة النموذج.

إضافة منطق لفتح نموذج التفاصيل

الآن دعونا نلقي نظرة على كيفية إضافة ماكرو صغير إلى نموذج متعدد العناصر أو جدول يفتح نموذج التفاصيل ويعرض العنصر الصحيح.

لا تقلق إذا لم تكن لديك خبرة كبيرة في استخدام وحدات الماكرو. يمكنك ببساطة نسخ ولصق XML من الإجراء في هذه المقالة.

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

    اضغط على المفتاح F4 لفتح نافذة الخصائص إذا لم تكن مفتوحة بالفعل.

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

نصيحة:(تلميح) يمكنك إضافة وحدات ماكرو إلى أعمدة متعددة.

لمزيد من المعلومات حول وحدات الماكرو في قواعد البيانات على جهاز الكمبيوتر الخاص بك ، راجع المقالة


من الواضح أنك إذا قمت بإنشاء مؤشر نوع<что там>:: سيعمل النموذج ، لكنني بحاجة إلى نموذج تم إنشاؤه بالفعل ، مع أزرار وما إلى ذلك. (بشكل عام ، عناصر تحكم مختلفة) ، ولكن يدويًا (أي برمجيًا) لا أريد أن أصفها بشكل نظيف (الكثير من الخربشة وليس حقيقة أنك تفهمها بشكل صحيح). هذا ما لا يزال يحيرني ....... عندما أضفت النموذج إلى مشروع تم إنشاؤه بالفعل ، في ملف الرأس الجديد Form2.h تمت كتابته على النحو التالي:

# براغما مرة واحدة
# تضمين "Form1.h"

باستخدام نظام مساحة الاسم ؛



باستخدام نظام مساحة الاسم :: البيانات ؛

مساحة الاسم My1 (

///
/// ملخص Form2



فئة المرجع العام Form2: public System :: Windows :: Forms :: Form
{
عام:
Form2 (باطل)
{
InitializeComponent () ،

}

محمي:

~ Form2 ()
{
إذا (مكونات)
{
حذف المكونات
}
}

خاص:



///
{
هذا-> المكونات = نظام gcnew :: ComponentModel :: Container () ؛
هذا-> الحجم = النظام :: الرسم :: الحجم (300،300) ؛
هذا-> نص = L "Form2" ؛
هذا-> الحشو = النظام :: Windows :: النماذج :: الحشو (0) ؛
هذا->
}
# براغمايند
};
}

على الرغم من أنه مكتوب في Form1.h مثل هذا:

# براغما مرة واحدة
# تضمين "Form2.h"

مساحة الاسم My1 (

باستخدام نظام مساحة الاسم ؛
باستخدام نظام مساحة الاسم :: ComponentModel ؛
باستخدام نظام مساحة الاسم :: المجموعات ؛
باستخدام نظام مساحة الاسم :: Windows :: Forms ؛
باستخدام نظام مساحة الاسم :: البيانات ؛
باستخدام نظام مساحة الاسم :: الرسم ؛

///
/// ملخص Form1
/// تحذير: إذا قمت بتغيير اسم هذه الفئة ، فستحتاج إلى تغيير
/// خاصية "اسم ملف المورد" لأداة مترجم الموارد المُدارة
/// المرتبطة بجميع ملفات .resx التي تعتمد عليها هذه الفئة. خلاف ذلك،
/// لن يتمكن المصممون من التفاعل بشكل صحيح مع المترجمين
/// الموارد المرتبطة بهذا النموذج.
فئة المرجع العام Form1: public System :: Windows :: Forms :: Form
{
عام:
Form1 (باطل)
{
InitializeComponent () ،
// TODO: أضف كود المُنشئ هنا
}

محمي:
/// امسح اي مراجع تم استخدامها.
~ Form1 ()
{
إذا (مكونات)
{
حذف المكونات
}
}
خاص: النظام :: Windows :: Forms :: Button ^ button1 ؛
محمي:

خاص:
/// متغير المصمم المطلوب.
النظام :: ComponentModel :: Container ^ مكونات ؛

#pragma region رمز تم إنشاؤه بواسطة Windows Form Designer
/// الطريقة المطلوبة لدعم المصمم - لا تعدل
/// محتويات هذه الطريقة مع محرر الكود.
InitializeComponent باطل (باطل)
{
هذا-> button1 = (نظام gcnew :: Windows :: Forms :: Button ()) ؛
هذا-> SuspendLayout () ؛
// زر +1
هذا-> button1-> الموقع = النظام :: الرسم :: النقطة (60 ، 76) ؛
هذا-> button1-> الاسم = L "button1" ؛
هذا-> button1-> الحجم = النظام :: الرسم :: الحجم (75 ، 23) ؛
هذا-> button1-> TabIndex = 0 ؛
هذا-> button1-> نص = L "button1" ؛
this-> button1-> UseVisualStyleBackColor = true ؛
this-> button1-> Click + = gcnew System :: EventHandler (this، & Form1 :: button1_Click) ؛
// Form1
هذا-> AutoScaleDimensions = النظام :: الرسم :: SizeF (6 ، 13) ؛
this-> AutoScaleMode = النظام :: Windows :: Forms :: AutoScaleMode :: Font ؛
هذا-> ClientSize = النظام :: الرسم :: الحجم (292 ، 266) ؛
هذا-> عناصر التحكم-> إضافة (هذا-> button1) ؛
هذا-> الاسم = L "Form1" ؛
هذا-> نص = L "Form1" ؛
هذا-> ResumeLayout (خطأ) ؛

}
# براغمايند

النظام الثابت :: Windows :: Forms :: Form ^ frm = gcnew System :: Windows :: Forms :: Form ()؛
خاص: نظام :: Void button1_Click (نظام :: كائن ^ مرسل ، نظام :: EventArgs ^ e) (
frm-> إظهار () ؛
}
};
}

في أماكن مختلفة ، يتم تنظيم اتصال NAMESPACE!