PDA

View Full Version : mdi forms



ice007
شنبه 30 تیر 1386, 14:50 عصر
برای یک فرم یک فرم فرزند ایجاد کرده ام ، مشکلی که وجود دارد این است که این فرم فرزند در همه حالات به زیر کنترل های فرم والد می رود و به هیچ عنوان روی انها نمایش داده نمی شود مثلا اگر روی فرم مادر یک تکست باکس باشد این فرم فرزند زیر ان می رود.
تمامی متدهای ان مانند active, bring to front, .... را بررسی کرده ام اما نتیجه ای نداشته ایا قلق خاصی دارد؟
کسی قبلا با این مشکل برخورد نکرده؟

eyes_shut_number1
شنبه 30 تیر 1386, 15:16 عصر
ایا این کار رو کردی واسه نمکایش چایلد؟

PrivateSubButton1_Click(ByValsenderAsSystem.Object , ByValeAsSystem.EventArgs) HandlesButton1.Click
DimfrmAsNewForm2
frm.Parent = Me.Parent
frm.Show()
EndSub

من اینطوری کردم درست بود
یه تست بکن خبرشو بده
فایل زیر هم بگیر من این کار رو کردم مشکلی نداشته
ممنون

ice007
شنبه 30 تیر 1386, 16:13 عصر
با تشکر از شما


frm.Parent = Me.Parent


باید تبدیل شود به



frm.mdiParent = Me

برای اینکه فرم فرزند باشد و فقط داخل فرم مادر حرکت کند و از ان خارج نشود باید بصورت بالا نوشته شود که اگر کد خود را بصورت بالا اصلاح کنید متوجه مشکل میشوید

eyes_shut_number1
شنبه 30 تیر 1386, 16:57 عصر
این کار را نکنید چون به ارور
Top-level Control cannot be added a control
منجر میشود
مشکلتان حل شد ice007 جان؟

__H2__
شنبه 30 تیر 1386, 17:31 عصر
سلام

با تشکر از شما


frm.Parent = Me.Parent


باید تبدیل شود به



frm.mdiParent = Me

برای اینکه فرم فرزند باشد و فقط داخل فرم مادر حرکت کند و از ان خارج نشود باید بصورت بالا نوشته شود که اگر کد خود را بصورت بالا اصلاح کنید متوجه مشکل میشوید

درست است!
اگر MDI دارید باید از خصوصیت MdiParent استفاده کنید و نه Parent !
دوست عزیز کاربر eyes_shut_number1 (http://barnamenevis.org/forum/member.php?u=38140) ، احتمالاً کدها را در مکان درستی تایپ نکرده اید مرجع Me در دستورات کاربر ice007 (http://barnamenevis.org/forum/member.php?u=35340) فرم Mdi اصلی است، یعنی باید دستورات را در داخل خود mdi تایپ کنید یا اگر جای دیگری تایپ کردید به جای Me از اشاره گر جاری mdi که جایی ذخیره کرده اید استفاده کنید

یعنی کد صحیح این میشود که باید داخل ماژول کلاسس خود Mdi تایپ شود!


Dim frmAs New Form2
frm.MdiParent = Me
frm.Show()


اگر پنجره اصلی را از حالت Max در آورید متوجه فرق Parent با MdiParent میشوید.
اگر پنجره Child میخواهید باید از mdiParent استفاده کنید (مثل رابطه پنجره اصلی Photoshop با پنجره مربوط به هر عکس)
اگر یک دیالوگ شناور میخواهید باید از Parent استفاده کنید (مثل رابطه پنجره اصلی Photoshop با پالت هایش)

برای TextBox و... هم بهتر است از یک Dock ، Panel شده استفاده کنید تا به یک الگوی رسمی همانند دیگر برنامه ها برسید.

eyes_shut_number1
شنبه 30 تیر 1386, 17:56 عصر
نه اشتبا ه تایپ نکردم
من تایپ رو اشتباه خوندم
فکر کردم نوشتن parent نه MdiParent
چون اگه Parent بزنی دیکه نمیشه کنترل بهش نصبت داد مثل
frm.Parent=Me
در این حالت که ایراد میگیره
درسته این دستور مشکلی نداره
مشکل ار حواس پرتی بود که کامل نخوندم

ice007
یک شنبه 31 تیر 1386, 09:05 صبح
اگر پنجره Child میخواهید باید از mdiParent استفاده کنید (مثل رابطه پنجره اصلی Photoshop با پنجره مربوط به هر عکس)
اگر یک دیالوگ شناور میخواهید باید از Parent استفاده کنید (مثل رابطه پنجره اصلی Photoshop با پالت هایش)

برای TextBox و... هم بهتر است از یک Dock ، Panel شده استفاده کنید تا به یک الگوی رسمی همانند دیگر برنامه ها برسید.

دقیقا یک فرم می خوام روی فرم دیگم نمایش داده بشه حالا فرقی نمیکنه کدوم یکی از حالتهای بالا باشد ولی هر دو روش بالا مشکل دارن مثلا اگر از parent ‌استفاده کنم وقتی فرم 2(فرزند) را روی فرم اصلی قرار دهیم و سپس روی فرم مادر کلیک کنیم فرم 2 بزیر فرم اصلی می رود (همانند فرمهای معمولی) ولی من می خواهم فرم 2 در هر حالتی روی فرم 1 باشد حتی وقتی با فرم 1 می کنم

اگر از mdi استفاده کنم فرم 2 بزیر کنترلهای فرم 1 می رود (حتی اگر یک Dock ، Panel شده استفاده کنم فرم کاملا از دید محو می شود)

__H2__
یک شنبه 31 تیر 1386, 09:39 صبح
سلام
مجدداً تاکید میکنم اگر پنجره تان mdi است از همان روش mdi عمل کنید وگرنه از owner استفاده کنید


Dim f AsNew System.Windows.Forms.Form
f.Show(Me)