منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : كيفية التعامل مع نماذج mdi
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته


اخواني في المنتدى الرائع لدي مشكلة في التعامل مع نموذج المتعددة (mdi) 
 لدي برنامج استخدمت فيه نموذج mdi ففي الشاشة الرئيسية والتي اسمها form1 لدي نموذجين احدهما اسمها form_big والذي اريد ان يفتح الفورم بشكل كبير دائما (maximize) .
والنموذج الاخر اسمه from_small والذي اريد ان ييفتح بشكل مصغر النموذج العادي (normal) .

المشكلة الاولى /عند فتح الفورم form_big لايفتح بشكل كبير maximize .
المشكلة اللثانية / عند فتح الفورم form_small اريده ان يكون ثابت بحجم صغير ,وعند فتح اي فورم اخر ثم الرجوع للنموذج المسمى form_small يفتح بشكل كبير.

االمرفق في الرابط 
https://dl.dropboxusercontent.com/u/8335...diform.rar



الرابط الموضوع
http://arabteam2000-forum.com/index.php/...D8%AC-mdi/
.....

النقطة الأولى (مهمة جداً):
دائماً إجعل الخاصية WindwState لنماذج الأبناء Normal وتغييرها يتم فقط بالكود
كود :
[ltr][/ltr]
Form frm2 =new Form2();
frm2.MdiParent = this;
frm2.WindowState = FormWindowState.Maximized;
frm2.Show();

النقطة الثانية:
طريقة ظهور نماذج الأبناء لا يمكن أن تكون إحداها كبيراً والأخر صغيراً.
وإذا أردت أن يكون أحد النماذج عادياً غير كبيراً فجعله منفصلا (غير تابع لـ MDIForm) أي لا تكتب له أمرMdiParent.



على حسب طلبك أن النموذج الأول كبيرا دائما والآخر صغير توجد طريقة تضمين الصغير داخل الكبير كالتالي مع اعتبار النقطة الأولى سابقاً:
كود :
// لابد من أن تكون خاصية حجم النافذة لجميع النماذج الأبناء عادية والتغيير يكون بالكود
FORM_BIG frm_big;
FORM_SMALL frm_small;

// تحميل الفورم الكبير أثناء التشغيل
private void Form1_Load(object sender, EventArgs e) {
   frm_big = new FORM_BIG();
   frm_big.ControlBox = false;
   frm_big.WindowState = FormWindowState.Maximized;
   frm_big.MdiParent = this;
   frm_big.Show();
}

private void فورمصغيرToolStripMenuItem_Click(object sender, EventArgs e) {
   frm_small = new FORM_SMALL();
   frm_small.TopLevel = false; // لابد من هذا الأمر
   frm_small.Parent = frm_big; // لاحظ طريقة النسب ولمن تم نسبه
   frm_small.BringToFront();   // لأننا نسبناه للنموذج الكبير لابد هنا من وضعه في مقدمة أدواته
   frm_small.WindowState = FormWindowState.Normal;
   frm_small.Show();

   // توسيط النموذج الصغيرة
   frm_small.Location= new Point((frm_small.Parent.ClientRectangle.Width -frm_small.Width)/2 ,
                                 (frm_small.Parent.ClientRectangle.Height -frm_small.Height)/2 );
}

.....
الله لا يحرمك من الجنة والأجر شكرا لك على مساعدتي على رغم من انها أيام عيد 
 


جربيتها لكن لو كان لدي أكثر من نموذج هل سأكتب الكود في جميع النماذج 
 
علما انني نجحت في حل لكن لست مقتنع به 
كود :
FORM_SMALL frm = new FORM_SMALL();

frm.MdiParent = this.MdiParent;

frm.MdiParent = Application.OpenForms["FORM_SMALL"];

frm.Show();