PDA

View Full Version : سوال: فرمی كه زير همه ی فرم های ديگه باشه



Armin060
یک شنبه 07 تیر 1388, 20:26 عصر
چطوری ميشه يه فرم هميشه زير فرم های ديگه باشه. ( حتی در زمانی كه اكتيو شده )

Armin060
دوشنبه 08 تیر 1388, 18:34 عصر
?????????????

saeedr22
دوشنبه 08 تیر 1388, 18:56 عصر
ببین سوالت رو نمی فهمم . ولی دقیق بگو می خواهی چی کار کنی.....
تو می خواهی که یه فرم ام دی آی بزاری و بعد روش هم چند تا آیکون بزرگ پایین بزاری که زیبا تر به و بعد هه کاراتو بکنی و .......
ببین یه فرم اصلی درست کن
بعد بقیه ی فرم ها رو با show dialog ویا topmost=true باز کن
مشکلت حل میشه .

Armin060
دوشنبه 08 تیر 1388, 19:28 عصر
بعد بقیه ی فرم ها رو با show dialog ویا topmost=true باز کن
راه چندان جالبی نيست.

مثلا Desktop رو فرض كنيد.
كل صفحه يك فرم MDI هست. كه نوار TaskBar رو اون فرم MDI قرار داره و Dock نوار TaskBar برابر Buttom هست. ( البته در حالت عادی ) صفحه دسكتاپ هم يه فرم ديگه هست كه به عنوان يك فرم فرزند به فرم MDI اضافه شده كه مقدار WindowState آن برابر Maximize است.
حالا صفحه Desktop فرمی هست كه زير همه ی فرم های ديگه قرار داره. منظورم از صفحه Desktop مكانی هست كه Icon ها روی اون قرار دارند. تو عكس فضای داخل قسمت مشخص شده رو ميگم.

من هم می خوام يه چيزی شبيه به Desktop درست كنم برای يكی از برنامه هام.

saeedr22
سه شنبه 09 تیر 1388, 08:57 صبح
بینید این کار تو Vb6 به راحتی انجام میشه ولی تو .net نمیشه
باید بتونی با sendtoback کار کنی که واقعیتش من نمی تونم اونو کنترل کنم.. امتحانش کن

saeedr22
سه شنبه 09 تیر 1388, 09:00 صبح
اگه بتونی یه کاری کنی که فرم اصلی ثابت بمونه و مینیمایز و ماکسی مایز نشه topmost بهترین گزینست.



Form2 frm=new Form2()
frm.topmost=true
frm.show

Armin060
سه شنبه 09 تیر 1388, 10:31 صبح
از كمك همه دوستان تشكر می كنم.:لبخندساده:



اگه بتونی یه کاری کنی که فرم اصلی ثابت بمونه و مینیمایز و ماکسی مایز نشه topmost بهترین گزینست.



استفاده از Topmost مشكلاتی رو داره. مثل اينكه اگر چند فرم فرزند با هم باز شده باشند يكی بر ديگری برتری داره. يعنی هميشه روی ديگری قرار داره و من نمی خوام اين مشكل به وجود بياد.


باید بتونی با sendtoback کار کنی که واقعیتش من نمی تونم اونو کنترل کنم
تو فكرش بودم، ولی يه مشكلی داره. ميشه در رويداد اكتيو فرم اصلی كه قراره زير همه ی فرم های ديگه بمونه از Sendtoback استفاده كرد. ولی توی اين برنامه من تايمر های زيادی وجود داره كه سه تای اون ها دائما در حال اجرا هستند كه دوتاشون با سرعت 1 ميلی ثانيه و يكی ديگه با سرعت يك دقيقه در حال كار هستند. واسه همين سرعت برنامه تا حدی كند شده و تا بياد فرم رو Sendtoback كنه كلی طول ميكشه.

البته يه راه ديگه هم هست و اون اينه كه به جای استفاده از يك فرم فرزند برای صفحه Desktop از يك UserControl استفاده كرد و اون رو توی فرم اصلی قرار داد و Dock اون رو برابر Fill كرد. ولی اينجا هم يه مشكلی كه وجود داره، اينه كه فرم های فرزند زير كنترل های فرم MDI قرار می گيرند. خوب حالا بايد چی كار كنم كه فرم های فرزند بيان روی كنترل ها؟

برای حل مشكل بالا فعلا يه راه پيدا كردم كه خود اين راه هم مشكلاتی داره. اگر فرم اصلی يك فرم MDI نباشه مشكل بالا حل ميشه. ولی در زمان Hide شدن فرم اصلی فرم های ديگه سر جای خودشون باقی ميمونن. اگه بشه همه ی فرم های برنامه رو Hide كرد اين مشكل حل ميشه.

مشكل ديگه هم وجود داره. فرم MDI توش حالت 3D ( فرو رفتگی ) داره. بايد چی كار كنم تا اون مشكل هم حل شه و به حالت عادی‌ برگرده؟

saeedr22
چهارشنبه 10 تیر 1388, 16:39 عصر
استفاده از Topmost مشكلاتی رو داره. مثل اينكه اگر چند فرم فرزند با هم باز شده باشند يكی بر ديگری برتری داره. يعنی هميشه روی ديگری قرار داره و من نمی خوام اين مشكل به وجود بياد.




ببینید این مشکل که شما میگین مربوط به showdialog هستش ... تا حالا topmost رو امتحان کردین .؟ به بار هم برین با topmost امتحان کنید مشلتون حل میشه ...مطمئن باشین.

Armin060
چهارشنبه 10 تیر 1388, 17:44 عصر
ببینید این مشکل که شما میگین مربوط به showdialog هستش ... تا حالا topmost رو امتحان کردین .؟ به بار هم برین با topmost امتحان کنید مشلتون حل میشه ...مطمئن باشین.


خودم هم دارم به اين نتيجه ميرسم كه Topmost بهترين راهه، ولی اون وقت اگر بخوام يه فرم هميشه روی فرم های ديگه باشه مشكل پيش مياد. البته می دونم بايد از Dialog استفاده كرد ولی وقتی كه يه فرم به صورت Dialog باز ميشه اون وقت كاربر فقط ميتونه از اون فرم استفاده كنه و از فرم های ديگه نمی تونه استفاده كنه.
اون فرمی هم كه قراره هميشه روی فرم های ديگه باشه تقريبا مثل TaskManager هست.
كاربر بايد به هنگام كار از اون فورم اطلاعاتی رو ببينه.

saeedr22
چهارشنبه 10 تیر 1388, 20:57 عصر
خودم هم دارم به اين نتيجه ميرسم كه Topmost بهترين راهه، ولی اون وقت اگر بخوام يه فرم هميشه روی فرم های ديگه باشه مشكل پيش مياد. البته می دونم بايد از Dialog استفاده كرد ولی وقتی كه يه فرم به صورت Dialog باز ميشه اون وقت كاربر فقط ميتونه از اون فرم استفاده كنه و از فرم های ديگه نمی تونه استفاده كنه.
اون فرمی هم كه قراره هميشه روی فرم های ديگه باشه تقريبا مثل TaskManager هست.
كاربر بايد به هنگام كار از اون فورم اطلاعاتی رو ببينه.

لطفاً اگه تونستین کاری بکنین به من هم بگین.