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

كيف افتح برنامج معين ضمن MDI الخاص ببرنامجي?

مغلق
بدأه دون سيلفاتور في 25 أغسطس 2005 · 9 رد · 914 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف اقوم بفتح برنامج نعين ضمن MDI من برنامجي

علما ان البرنامج الثاني من تصميمي

فمذا اكتب في الكود لكي يكون البرنامج MDI parent لبرنامجي ؟

احتاج هذه الطريقه لانه عندي برنامج حسابات من تصميمي

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

ما اريد اضيف كود الحسابات لل project

ساعدوني

هذا مهم جدا !!

abo_alzobaer@hotmail.com

#2

عندى فكرة بس ما جربتها.

جربها انت و سواء نجحت او لا ابقى قولنا اوك

هتحتاج تضيف شوية كود فى برنامج الحسابات على ان هوا المفروض اللى هيبقى child مظبوط ؟؟؟؟

بص يا سيدى فى داله اسمها api function

SETParent

و دا شكل تعريفها فى اليجوال بيسيك . شوف انت شكلها هيبقى إزاى فى السى شارب

Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

المهم تقدر تستعمل الداله دى مع الداله

FindWindowEX

Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

و تستعملهم فى كل نافذة من نوافذ برنامج الحسابات فى constructor او load ثرثىف بتاعهم مثلا

بحيث انك تبحث عن النافذة الرئيسيه و تجيب handle لها ب findwindowex و بعدين تبعته لsetparent عشان يخليها parent للنافذة الى هتتحمل دى

او تعمل فى برنامج الحسابات دالة main تقبل بارامتر و يكون هوا handle الى هواخاصية hwnd بتاعة النافذة ال mdi و تخزنة عندك فى متغير عام فى البرنامج و كل لما تحب تعمل نافذة child لل mdi

تستدعى setparent مع القيمة دى .

و انت طبعا و انت بتشغل البرنامج دا هتبعتله hwnd بتاع ال mdi كبارمتر

جربها و إن شاء الله تنفع و أكيد تقولنا إذا كانت اشتغلت ولا لأ ... خلاص ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

أحمد صلاح

#3
form2 f=new form2();
f.MdiParent=this;
f.show();
#4

لا يا أخى هوا بيسأل إزاى يفتح نوافذ برنامج تانى تماما .

يعنى عاوز يشغل ملف exe من برنامجة و نوافذ ال exe دا تتفتح داخل mdi بتاعة برنامجه.

لكن الكود اللى انت كاتبه دا لو كان النافذتين فى نفس البرنامج.

أحمد صلاح

#5
dev_a_salah كتب:
عندى فكرة بس ما جربتها.

جربها انت و سواء نجحت او لا ابقى قولنا اوك

هتحتاج تضيف شوية كود فى برنامج الحسابات على ان هوا المفروض اللى هيبقى child مظبوط ؟؟؟؟

بص يا سيدى فى داله اسمها api function

SETParent

و دا شكل تعريفها فى اليجوال بيسيك . شوف انت شكلها هيبقى إزاى فى السى شارب

Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

المهم تقدر تستعمل الداله دى مع الداله

FindWindowEX

Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

و تستعملهم فى كل نافذة من نوافذ برنامج الحسابات فى constructor او load ثرثىف بتاعهم مثلا

بحيث انك تبحث عن النافذة الرئيسيه و تجيب handle لها ب findwindowex و بعدين تبعته لsetparent عشان يخليها parent للنافذة الى هتتحمل دى

او تعمل فى برنامج الحسابات دالة main تقبل بارامتر و يكون هوا handle  الى هواخاصية hwnd بتاعة النافذة ال mdi و تخزنة عندك فى متغير عام فى البرنامج و كل لما تحب تعمل نافذة child لل mdi

تستدعى setparent مع القيمة دى  .

و انت طبعا و انت بتشغل البرنامج دا هتبعتله hwnd بتاع ال mdi كبارمتر

جربها و إن شاء الله تنفع و أكيد تقولنا إذا كانت اشتغلت ولا لأ ...  خلاص ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

شكرا لك عزيزي

لكن للاسف مانفعت

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

شكرا لتفاعلك معاي !

abo_alzobaer@hotmail.com

#6

سلام عليكم أخى

على فكرة بقى انا ما كنت اتوقع يوم انى احاول اجربها لأنى كنت اشعر بالملل و ما أعرف ليه انى اجرب كل هذا و انا مش محتاجة.

لكن لما انت كتبتلى انها ما نفعت بصراخة استفذتنى و خلتنى اصر اجربها و الالحمد لله اشتغلت بنجاح.

أحمد صلاح

#7

طيب تسمح لو تجيب لي المثال؟

علشان اعرف شنو خطأي

abo_alzobaer@hotmail.com

#8

طيب اوك هجيبلك المثال بكرة إن شاء الله عشان انا تعبان و داخل انام دلوقتى و على ما اشوفه و اجهزة

اوك

أحمد صلاح

#9

كود المثال اللى انا جربته و اشتغل

الأول الكود التالى هتكتبه فى نافذة ال mdi لما تحب تشغل البرنامج التانى

Process process=new Process();
 	 process.StartInfo.FileName="d:\\child.exe";
 	 process.StartInfo.Arguments=this.Handle.ToInt32().ToString();
 	 process.Start();

الكود دا بيفترض ان البرنامج اللى انت عاوز تشغله فى نافذة mdi اسمه child.exe و موجود فى D:\

تانى حاجة بقى المفروض تكتب الكود التالى فى صفحة الكود بتاعة النافذة الرئيسيه للبرنامج التانى

public static string[] hello;

  [System.Runtime.InteropServices.DllImport("user32")]
  private static extern int SetParent (int child,int parent);

بحيث ان hello دى مصفوفة هتخزن فيها المتغيرات بتاعة البارامترات اللى مبعتولك من البرنامج التانى و اللى تحتوى handle بتاع النافذة mdi

و بعد كدا تغير شكل ال Main () للشكل التالى

[STAThread]
  static void Main(string[] args) 
  {
 	 hello=args;
 	 Application.Run(new Form1());
  }

و بعد كدا تكتب فى كل نوافذ البرنامج اللى انت مشغله فى load event او constructor

الكود التالى

 	 SetParent(this.Handle.ToInt32(),int.Parse(hello[0]));

 	 MessageBox.Show(Form1.hello[0]);

أحمد صلاح

#10

تسلم ياسيد الناس !!!

كذا كل شي تمام ..

الف شكر لك !

abo_alzobaer@hotmail.com

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…