PDA

View Full Version : فرم MDI



Future
شنبه 18 فروردین 1386, 03:13 صبح
سلام دوستان، من یک فرم اصلی دارم که خاصیت IsMdiContainer آن برابر با False است.این فرم Maximize است. روی این فرم من یک panel در سمت چپ قرار دادم که تمام سمت چپ را گرفته و یک Button راهم روی فرم گراشتم با کلیک کردن بر روی فرم یک فرم دیگه ظاهر میشه که خاصیت IsMdiContainer آن برابر با True است واین کد را هم برای ظاهر شدن فرم دوم در رویداد Omclick دکمه مربوطه نوشتم:
Passengers_Check_In frm = new Passengers_Check_In();
frm.ShowDialog(this);
این فرم هم Maximize است.حالا می خوام وقتی روی دکمه کلید کردم فرم دوم ظاهر بشه بشرطی که panel فرم اول ناپدید نشه.یعنی می خوام فرم دوم در فرم اول ظاهر بشه.

__H2__
شنبه 18 فروردین 1386, 10:10 صبح
سلام
البته درست متوجه شدم، یعنی چه Panel اولی ناپدید نشه؟
آیا میخواهید یک فورم MDI را در داخل یک فورم غیر MDI بازکنید؟؟؟؟؟؟؟
اگر اینطور است، این کار طبق قوانین فریم وروک غیر مجاز است.
البته با API های ویندوز میشود به زور انجامش داد! ولی ....

اگر بیشتر توضیح دهید، بدون شک میتوان راه حل مناسبی ارایه داد که با امکانات داخلی فریم وروک مچ باشد.

Future
شنبه 18 فروردین 1386, 15:50 عصر
سلام دوست عزیز، نگاه کنید من منوی برنامه را آپلود کردم.این منوی اصلی من است.می خوام یک دکمه بگذارم روی فرم و وقتی روی دکمه کلید کردم یک فرم باز بشه بشرطی که فرم دوم وقتی اجرا میشه با خاصیت maximize باشه و حداکثر تا زیر panel زرد رنگ باشه.یعنی maximize ان فقط محدوده سفید رنگ را بگیره.امیدوارم منظورم را کامل متوجه شده باشید.

Future
شنبه 18 فروردین 1386, 15:54 عصر
این هم منوی برنامه دوست عزیز

Future
شنبه 18 فروردین 1386, 16:00 عصر
نمیدونم برای چی آپلود نشده بود ولی این هم آپلود

Future
یک شنبه 19 فروردین 1386, 03:42 صبح
سلام، آقا کسی پیدا نشد جواب ما را بده، بد جوری گیر کردم

__H2__
یک شنبه 19 فروردین 1386, 11:03 صبح
سلام
من فایل ضمینه تان را دیدم.
کافیست پنجره اصلی را که در شکل داده بودید MDI کنید (IsMdiContainer=True) و بقیه پنجره ها را به صورت Child داخل آن بار کنید.
البته واضح است که در محدوده سفید هیچ چیز نباید باشد تا خود دات نت پنجره های Child را در آنجا باز کند.

چیزی شبیه این دستورا را دنبال کنید:

1- یک پنجره MDi بسازید.
2- فقط یک کنترلر Panel روی ان قرار دهید و Dock آن را Top کنید.
3- قسمت بالای شکل را داخل کنترلر Panel بسازید.
4- پنجره های Child را به صورت Max شده داخل این MDI باز کنید. و اجزاه تغییر سایز Child ها را به کار بر ندهید.

Future
دوشنبه 20 فروردین 1386, 01:47 صبح
دوست عزیز از راهنمایی شما ممنون. مشکل با راه حل شما برطرف شد فقط وقتی فرم باز میشه کنترل های منوی اول در فرم دوم نمایش داده میشه. برای اینمنظور آیا باید برای تک تک کنترل ها send to back بکار برد یا راه حل دیگه ای است.
با تشکر

__H2__
دوشنبه 20 فروردین 1386, 13:02 عصر
سلام
من بازهم درست متوجه نشدم!!!!!

... کنترل های منوی اول در فرم دوم نمایش داده میشه...
کنترلر یا منو؟؟؟ در شکل که اصلاَ منویی نبود! یک کم بیشتر ....

باز یادآوری میکنم که در MDI (فرم اولی) یک Panel با Dock=Top بگذارید و تمام کنترلرهای دیگر را درون آن Panel قرار دهید. باید با Max شدن پنجره های Child مشکلی پیش نیاید.

Future
چهارشنبه 22 فروردین 1386, 04:07 صبح
دوست عزیز،وقتی فرم child باز میشه و به حالت maxmize در می آید آیکون های minimize, maxmimize and window close به بالای صفحه می رند یعنی ظاهر می شوند در صورتی که گزینه ای که من انتخاب کردم none است یعنی از خود فرم ناپدید می شوند و به menu bar در فرم mdi parent ظاهر می شوند.
امیدوارم منظورم را درست رسانده باشم.
http://www.codeproject.com/script/comments/forums.asp?forumid=1649
اگه امکانش است ایمیلتان را بدبد من برنامه را براتون می فرستم

__H2__
چهارشنبه 22 فروردین 1386, 10:49 صبح
دوست عزیز،وقتی فرم child باز میشه و به حالت maxmize در می آید آیکون های minimize, maxmimize and window close به بالای صفحه می رند یعنی ظاهر می شوند در صورتی که گزینه ای که من انتخاب کردم none است یعنی از خود فرم ناپدید می شوند و به menu bar در فرم mdi parent ظاهر می شوند.
امیدوارم منظورم را درست رسانده باشم.
http://www.codeproject.com/script/comments/forums.asp?forumid=1649
اگه امکانش است ایمیلتان را بدبد من برنامه را براتون می فرستم

سلام
مطمئن نیستم راه حل ساده داشته باشد ولی باید امتحان کنم، شاید هم راحت باشد اگر امروز وقت کردم امتحان کنم، جوابتان را میدهم ولی فردا و پس فردا نیستم.

نیاز خاصی هم به برنامه تان ندارم (متوجه شدم مشکلتان کجاست) ولی بحرحال این ایمیل:
H2@h-two.info

Future
جمعه 24 فروردین 1386, 07:06 صبح
سلام دوستان, کسی متوجه مشکل من نشده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟

__H2__
یک شنبه 26 فروردین 1386, 09:50 صبح
سلام
میبخشید، پنجشنبه و جمعه نبودم !

من قبلاَ چیزی شبیه این را در 2003 درست کردم ولی نه با روش های معمول ! بعد هم مجبور شدم سریعاَ آن را به 2005 آپگرید کنم.
الان امیدوار بودم راه ساده تری در 2005 پیدا کنم ولی متاسفانه نیافتم.
پس به شما هم توصیه میکنم اگر بر انجام این کار پافشاری میکنید از آن روش استفاده کنید.

من به جای فرم ها از UserControl ها استفاده کردم !
(یعنی هر پنجره Child را با یک UserControl پیاده سازی کردم)

سپس به جای فرم ها آنها را لود کردم و به مجموعه کنترلرهای جاری فرم اضافه کردم،
برای شبیه سازی سوییچ به پنجره های مختلف هم یک تابع نوشتم که UserControl ای را که میخواستم مثلاَ رو باشد (فعال و جاری) را میگرفت و آن را مرئی و تمام UserControl های دیگر را در پنجره نامرئی میکرد.
و برای بسته شدن شبه پنجره ها (و آزاد سازی RAM) هم آنها را از لیست کنترلرهای فرم حذف میکردم و سپس Dispose را اجرا میکردم.
و...

با همین روش توانستم برنامه جالبی درست کنم و البته تا آخرش رفتم! و امکانات زیادی به آن اضافه کردم، مثلاَ یک چیزی شبیه Taskbar ویندوز که در بالای فرمم قرار داشت و برای هر پنجره Child یک دکمه نشان میداد که با آن دکمه ها میشئ بین پنجره ها سوییچ کرد.

اگر خواستید تصاویرش را می توانم بفرستم، تا ببینید این روش عملی است.

بحرحال به نظر میرسد، که در 2005 هم اگر از فرم ها و MDI ها استفاده کنید، نتوانید جلوی نمایش دکمه های کنترل باکس را بگیرید.

Future
یک شنبه 26 فروردین 1386, 10:24 صبح
دوست عزیز ممنون میشم اگه برام بفرستید و همچنین یک نمونه کد کوچک برای اینکار
DalikoDalika3839@Gmail.Com
البته ببخشید من تازه سوئیچ کردم به سی شارپ و واقعا برام گیج کننده است..
با تشکر