چطوری ميشه يه فرم هميشه زير فرم های ديگه باشه. ( حتی در زمانی كه اكتيو شده )
چطوری ميشه يه فرم هميشه زير فرم های ديگه باشه. ( حتی در زمانی كه اكتيو شده )
?????????????
ببین سوالت رو نمی فهمم . ولی دقیق بگو می خواهی چی کار کنی.....
تو می خواهی که یه فرم ام دی آی بزاری و بعد روش هم چند تا آیکون بزرگ پایین بزاری که زیبا تر به و بعد هه کاراتو بکنی و .......
ببین یه فرم اصلی درست کن
بعد بقیه ی فرم ها رو با show dialog ویا topmost=true باز کن
مشکلت حل میشه .
راه چندان جالبی نيست.بعد بقیه ی فرم ها رو با show dialog ویا topmost=true باز کن
مثلا Desktop رو فرض كنيد.
كل صفحه يك فرم MDI هست. كه نوار TaskBar رو اون فرم MDI قرار داره و Dock نوار TaskBar برابر Buttom هست. ( البته در حالت عادی ) صفحه دسكتاپ هم يه فرم ديگه هست كه به عنوان يك فرم فرزند به فرم MDI اضافه شده كه مقدار WindowState آن برابر Maximize است.
حالا صفحه Desktop فرمی هست كه زير همه ی فرم های ديگه قرار داره. منظورم از صفحه Desktop مكانی هست كه Icon ها روی اون قرار دارند. تو عكس فضای داخل قسمت مشخص شده رو ميگم.
من هم می خوام يه چيزی شبيه به Desktop درست كنم برای يكی از برنامه هام.
بینید این کار تو Vb6 به راحتی انجام میشه ولی تو .net نمیشه
باید بتونی با sendtoback کار کنی که واقعیتش من نمی تونم اونو کنترل کنم.. امتحانش کن
اگه بتونی یه کاری کنی که فرم اصلی ثابت بمونه و مینیمایز و ماکسی مایز نشه topmost بهترین گزینست.
Form2 frm=new Form2()
frm.topmost=true
frm.show
از كمك همه دوستان تشكر می كنم.
استفاده از Topmost مشكلاتی رو داره. مثل اينكه اگر چند فرم فرزند با هم باز شده باشند يكی بر ديگری برتری داره. يعنی هميشه روی ديگری قرار داره و من نمی خوام اين مشكل به وجود بياد.اگه بتونی یه کاری کنی که فرم اصلی ثابت بمونه و مینیمایز و ماکسی مایز نشه topmost بهترین گزینست.
تو فكرش بودم، ولی يه مشكلی داره. ميشه در رويداد اكتيو فرم اصلی كه قراره زير همه ی فرم های ديگه بمونه از Sendtoback استفاده كرد. ولی توی اين برنامه من تايمر های زيادی وجود داره كه سه تای اون ها دائما در حال اجرا هستند كه دوتاشون با سرعت 1 ميلی ثانيه و يكی ديگه با سرعت يك دقيقه در حال كار هستند. واسه همين سرعت برنامه تا حدی كند شده و تا بياد فرم رو Sendtoback كنه كلی طول ميكشه.باید بتونی با sendtoback کار کنی که واقعیتش من نمی تونم اونو کنترل کنم
البته يه راه ديگه هم هست و اون اينه كه به جای استفاده از يك فرم فرزند برای صفحه Desktop از يك UserControl استفاده كرد و اون رو توی فرم اصلی قرار داد و Dock اون رو برابر Fill كرد. ولی اينجا هم يه مشكلی كه وجود داره، اينه كه فرم های فرزند زير كنترل های فرم MDI قرار می گيرند. خوب حالا بايد چی كار كنم كه فرم های فرزند بيان روی كنترل ها؟
برای حل مشكل بالا فعلا يه راه پيدا كردم كه خود اين راه هم مشكلاتی داره. اگر فرم اصلی يك فرم MDI نباشه مشكل بالا حل ميشه. ولی در زمان Hide شدن فرم اصلی فرم های ديگه سر جای خودشون باقی ميمونن. اگه بشه همه ی فرم های برنامه رو Hide كرد اين مشكل حل ميشه.
مشكل ديگه هم وجود داره. فرم MDI توش حالت 3D ( فرو رفتگی ) داره. بايد چی كار كنم تا اون مشكل هم حل شه و به حالت عادی برگرده؟
آخرین ویرایش به وسیله Armin060 : سه شنبه 09 تیر 1388 در 10:47 صبح
خودم هم دارم به اين نتيجه ميرسم كه Topmost بهترين راهه، ولی اون وقت اگر بخوام يه فرم هميشه روی فرم های ديگه باشه مشكل پيش مياد. البته می دونم بايد از Dialog استفاده كرد ولی وقتی كه يه فرم به صورت Dialog باز ميشه اون وقت كاربر فقط ميتونه از اون فرم استفاده كنه و از فرم های ديگه نمی تونه استفاده كنه.ببینید این مشکل که شما میگین مربوط به showdialog هستش ... تا حالا topmost رو امتحان کردین .؟ به بار هم برین با topmost امتحان کنید مشلتون حل میشه ...مطمئن باشین.
اون فرمی هم كه قراره هميشه روی فرم های ديگه باشه تقريبا مثل TaskManager هست.
كاربر بايد به هنگام كار از اون فورم اطلاعاتی رو ببينه.