PDA

View Full Version : سوال: برای چیدمان ثابت(عدم تغییر مکان) فرمها و دیگر اعضا باید از Panel استفاده کنیم؟



sahel65
پنج شنبه 20 تیر 1392, 10:04 صبح
سلام؛
خسته نباشین؛
ببخشید که سوالم ممکنه مبتدی باشه؛ ما اگه بخوایم یک صفحه جهت ثبت اطلاعات و به اصطلاح همون فرم اصلی داشته باشیم؛ و بخوایم مثلا منو رو که در بالا و سمت راست گذاشتیم ثابت باشه و به نوعی استاندارد؛ باید از Panel استفاده کنیم؟ آیا این درسته؟ کلا برای طراحی استاندارد که اجزا با کوچیک و بزرگ کردن صفحه بهم نریزن از چه روشی باید استفاده کرد؟
ممنون

sahel65
شنبه 22 تیر 1392, 10:45 صبح
الان در اینجا فرمی رو که طراحی کردم ببینید:
شکل 1 فرمی است که در حالت طراحی اونو ایجادش کردم، می بینید که جای منو درسته و در گوشه سمت راست بالا قرار گرفته. وقتی که اجراش می کنیم مثل شکل 2 میشه و منو میاد در وسط قرار میگیره. میشه روش صحیح ایجادش رو بگید؟

http://uploadax.com/images/46713205498766953882.jpg

dbdbdb
شنبه 22 تیر 1392, 11:00 صبح
دوست عزیز من شکلی نمیبینم

CsharpNevisi
شنبه 22 تیر 1392, 11:15 صبح
الان در اینجا فرمی رو که طراحی کردم ببینید:
شکل 1 فرمی است که در حالت طراحی اونو ایجادش کردم، می بینید که جای منو درسته و در گوشه سمت راست بالا قرار گرفته. وقتی که اجراش می کنیم مثل شکل 2 میشه و منو میاد در وسط قرار میگیره. میشه روش صحیح ایجادش رو بگید؟

عکسی نمیبینم من .... !!! :لبخند:

dbdbdb
شنبه 22 تیر 1392, 12:01 عصر
دوست عزیز 2 راه حل دارین

1.Dock کنترل منوی مورد نظرتون رو برابر Top قرار بدین

یا اینکه menu1.Widht = Form.Width بزارید

که گزینه اول معقول تره

CsharpNevisi
شنبه 22 تیر 1392, 12:04 عصر
از پراپرتیز گزینه
Anchor=Top, Left, Right
قرار بده ببین مشکلت حل میشه... !!!؟؟؟؟

sahel65
شنبه 22 تیر 1392, 13:54 عصر
مرسی و سپاس ازتون ولی مشکلم حل نشد!!!:گریه::گریه::گریه:
برنامه رو ضمیمه کردم؛ البته هیچی نداره فقط شامل یه فرم ساده + منو که داخل Panel گذاشتمش.
ببخشید؛ میشه یه نگاه دوباره بکنید؟

CsharpNevisi
شنبه 22 تیر 1392, 14:02 عصر
مرسی و سپاس ازتون ولی مشکلم حل نشد!!!:گریه::گریه::گریه:
برنامه رو ضمیمه کردم؛ البته هیچی نداره فقط شامل یه فرم ساده + منو که داخل Panel گذاشتمش.
ببخشید؛ میشه یه نگاه دوباره بکنید؟

اااااااااااااااااااااا ...... !!!!
این چه کاریه اخه ؟؟؟؟
خود منو رو وقتی اضافه کنی اون بالا قرار میگیره و با بزرگ کوچیک شدن تغییر سایز میده ... اون پنل رو پاک کن و یه منو جدید تو فرم بزار ... !!!!

khokhan
شنبه 22 تیر 1392, 14:10 عصر
مرسی و سپاس ازتون ولی مشکلم حل نشد!!!:گریه::گریه::گریه:
برنامه رو ضمیمه کردم؛ البته هیچی نداره فقط شامل یه فرم ساده + منو که داخل Panel گذاشتمش.
ببخشید؛ میشه یه نگاه دوباره بکنید؟

ببین منظورت اینه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟:متفکر:

sahel65
دوشنبه 24 تیر 1392, 10:38 صبح
دوست عزیزم آقا KhoKhan سلام؛
بابت راهنمایی و زحمتی که برام کشیدید خیلی خیلی سپاسگزارم.
من پروژه شما رو باز کردم و طی مراحل زیر و با ایده گرفتن از فرم شما خودم یک فرم دیگه درست کردم؛
لطفا ببینید آیا درست کار کردم و شما هم همینجوری ایجادش کردین؟
ضمنا آیا همین روش رو برنامه نویسان حرفه ای در پیش می گیرن؟ یعنی برای اینکه اجزا و فرمهایی که قرار میدن تو صفحه تکون نخوره و حالت ثابتی داشته باشه از همین روشی که شما استفاده کردین و من هم به کار بردم استفاده میشه؟
مزید امتنانه در این زمینه تجربیات خودتون رو به من که مبتدی هستم بگید.

1) در ابتدا یک TableLayoutPanel ایجاد کردم و تعداد ستونهاش رو یک گذاشتم.
1-1)خاصیت Dock رو به Fill تغییر دادم.
2-1) خاصیت RightToLeft رو به yes تغییر دادم.
3-1) خاصیت Size هم که خب سلیقه ای ست و میتونیم هر اندازه ای بهش بدیم.
3-1) خاصیت TabIndex رو هم به 1 : آیا در اینجا مهمه که یک باشه؟ تاثیری در روند اجرای برنامه داره؟

2) در مرحله بعدی یک Panel ایجاد کردم.
1-2) تغییر خاصیت رنگ Backcolor .
2-2) تغییر خاصیت Dock به Fill .
3-2) و در نهایت تغییر size

3) در مرحله آخر یک Menustrip اضافه می کنیم.
1-3) مواردی رو که نیاز داریم در اینجا به منو و زیرمنو اضافه می کنیم؛ در این بخش هیچکدوم از خاصیتهای Menustrip ی که من ایجادش کردم با خاصیتهای شما تغییری نداشتن.

برنامه رو که اجرا کردم دقیقا مشابه شما اجرا شد. با اینحال برنامه رو براتون اینجا می ذارم تا اگه زحمتی نیست ببینید درست کار کردم یا نه!

--------

من چون زیاد با محیط فرم کار نکرده بودم؛ ولی میدونستم که باید از panel استفاده کنیم؛ حالا چرا دوستمون CsharpNevisi اینجوری گفته:

این چه کاریه اخه ؟؟؟؟
خود منو رو وقتی اضافه کنی اون بالا قرار میگیره و با بزرگ کوچیک شدن تغییر سایز میده ... اون پنل رو پاک کن و یه منو جدید تو فرم بزار ... !!!!
پس پنل برای چیه؟

--------

حالا اگه بخوام یک DataGrid هم اضافه کنم میشه بگید به چه نحوی پیاده ش کنم که مثل الان خوب باشه؟ یعنی مطابق با اندازه صفحه اونهم خودش رو جمع کنه! بیارمش تو Panel؟
مرسی و متشکرم.

khokhan
دوشنبه 24 تیر 1392, 10:58 صبح
دوست عزیزم آقا KhoKhan سلام؛

من چون زیاد با محیط فرم کار نکرده بودم؛ ولی میدونستم که باید از panel استفاده کنیم؛ حالا چرا دوستمون CsharpNevisi اینجوری گفته:

پس پنل برای چیه؟

--------

حالا اگه بخوام یک DataGrid هم اضافه کنم میشه بگید به چه نحوی پیاده ش کنم که مثل الان خوب باشه؟ یعنی مطابق با اندازه صفحه اونهم خودش رو جمع کنه! بیارمش تو Panel؟
مرسی و متشکرم.
باسلام
خوب گفته دوست بسیار محترمCsharpNevisi صحیح هست چون در حالت عادی اگه Menustrip رو به فرم اضافه کنین خودش رو با سایز فرم وفق می ده ومتناسب با اندازه فرم بزرگ وکوچک می شه اما چون شما Menustrip رو داخل پنل اضافه می کردین پس بنا براین خاصیت Dock کنترل Menustrip با پنل منطبق می شد وبا تغییر در اندازه فرم ایجاد مشکل می کرد

اما مسئله بعدی این که اصولا TableLayoutPanel برای یه همچی مواقع طراحی گردیده و اگه می خواهید از کنترلهی بیشتری استفاده کنین می تونین برتعداد ستونها وردیفهای TableLayoutPanel اضافه کرده و و توی سلوهاش پنل اضافه کنین وسایر کنرلهاتونو داخل پنل بذارین منتهی بایستی خاصیت اونها رو خوب ست کنین Dock

sahel65
دوشنبه 24 تیر 1392, 11:35 صبح
متشکرم؛ پس طبق توضیحی که دادین من الان اگه بخوام یک Datagridview اضافه کنم؛ بهتره که یک سطر به TableLayoutPanel اضافه کرده و DataGrid رو تو اونجا بذارمش؛ درسته؟

danialafshari
دوشنبه 24 تیر 1392, 12:23 عصر
متشکرم؛ پس طبق توضیحی که دادین من الان اگه بخوام یک Datagridview اضافه کنم؛ بهتره که یک سطر به TableLayoutPanel اضافه کرده و DataGrid رو تو اونجا بذارمش؛ درسته؟

سلام
نیازی به Tablelayoutpanel نیست
و همونطوری که دوستان گفتند از Anchor استفاده کنید. واقعا یادش بگیرید که خیلی مهمه
موفق باشید

sahel65
دوشنبه 24 تیر 1392, 12:32 عصر
همونطوری که دوستان گفتند از Anchor استفاده کنید
ممنونم ازتون ؛ میشه آخرین برنامه پیوست رو نگاه کرده و ایده تون رو روش اعمال کنید؟ یا بهم بگید نحوه انجامش رو؟
روش شما چه تفاوتی با دوستمون می کنه؟
متشکرم.

CsharpNevisi
دوشنبه 24 تیر 1392, 12:36 عصر
پس پنل برای چیه؟
پنل برای بخش بندی کنترها است ... !!!
به عنوان مثال شما یه برنامه اموزمون گیر درست میکنید که جواب ها چهار گزینه ای هستند ... !!!
خب برای این کار شما نیاز دارید که از دکمه رادیویی استفاده کنید و فقط از بین دکمه های رادیویی یکیشون میتونه مقدار true داشته باشه .. !!
اگه شما تو فرمتون 10 تا سوال داشته باشین دکمه ها میشن 40 تا و از این 40 تا یکیشون مقدار ترو داره و بقیه فالس و در واقع به بقیه سوالات نمیشه جواب داد ... این کار یه راه حل داره اونم استفاده از پنل و یا گروپ باکس است .. !!

khokhan
دوشنبه 24 تیر 1392, 14:03 عصر
ممنونم ازتون ؛ میشه آخرین برنامه پیوست رو نگاه کرده و ایده تون رو روش اعمال کنید؟ یا بهم بگید نحوه انجامش رو؟
روش شما چه تفاوتی با دوستمون می کنه؟
متشکرم.
البته من به عنوان ارائه راه کار برای مشکل خاص شما اون نمونه رو گذاشتم ونمی شه گفت صد در صد همین گزینه وبس
راجع به این مشکل بارها وبارها صحبت شده و دوستان استفاده از Anchor رو پیشنهاد دادند
حالا سوال این است به فرض مثال شما یه گرید گذاشتین وسط فرم و خاصیت Dock اونرو هم پیش فرض گذاشتین به این معنی که هیچ نو چینش براش تعرف نکردین با این فرض آیا با Anchor در هر اندازه فرم باز در وسط صفحه خواهد ماند :لبخند:

به هر حال
الهم خیر فی ما وقع

Sal_64
دوشنبه 24 تیر 1392, 14:51 عصر
البته من به عنوان ارائه راه کار برای مشکل خاص شما اون نمونه رو گذاشتم ونمی شه گفت صد در صد همین گزینه وبس
راجع به این مشکل بارها وبارها صحبت شده و دوستان استفاده از Anchor رو پیشنهاد دادند
حالا سوال این است به فرض مثال شما یه گرید گذاشتین وسط فرم و خاصیت Dock اونرو هم پیش فرض گذاشتین به این معنی که هیچ نو چینش براش تعرف نکردین با این فرض آیا با Anchor در هر اندازه فرم باز در وسط صفحه خواهد ماند :لبخند:

به هر حال
الهم خیر فی ما وقع

سلام
خاطرم هست داخل فرم مین یکی از برنامه هام از Tablelayoutpanel استفاده کرده بودم
مثلا با سه ستون و ده ردیف
و در هر ردیف یک باتم گذاشته بودن
اما زمانیکه فرم ماکسیمایز میکردم بین ردیف ها فاصله زیادی ایجاد میشد ، مثلا باتم های ردیف اول و دوم در بالای صفحه قرار میگرفتن و هشت باتم باقیمانده در پایین و وسط صفحه هم بیابون برهوت !

میشه بگید ایراد از کجاست؟

danialafshari
دوشنبه 24 تیر 1392, 14:58 عصر
سلام
خاطرم هست داخل فرم مین یکی از برنامه هام از Tablelayoutpanel استفاده کرده بودم
مثلا با سه ستون و ده ردیف
و در هر ردیف یک باتم گذاشته بودن
اما زمانیکه فرم ماکسیمایز میکردم بین ردیف ها فاصله زیادی ایجاد میشد ، مثلا باتم های ردیف اول و دوم در بالای صفحه قرار میگرفتن و هشت باتم باقیمانده در پایین و وسط صفحه هم بیابون برهوت !

میشه بگید ایراد از کجاست؟

فکر می کنم شما هم مشکل sahel65 دارید و با آنچر حل بشه
این کامپوننت هم بدک نیست
http://barnamenevis.org/showthread.php?164851-%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B3%D8%A7%DB%8C%D8%B2-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D8%AA%D9%88%D9%85%D8%A7%D8%AA%DB%8C%DA%A9-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%B1%D8%B2%D9%88%D9%84%D9%88%D8%B4%D9%86

Sal_64
دوشنبه 24 تیر 1392, 15:07 عصر
فکر می کنم شما هم مشکل sahel65 دارید و با آنچر حل بشه
این کامپوننت هم بدک نیست
http://barnamenevis.org/showthread.php?164851-%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%D8%B3%D8%A7%DB%8C%D8%B2-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D8%AA%D9%88%D9%85%D8%A7%D8%AA%DB%8C%DA%A9-%D8%AF%D8%B1-%D9%87%D8%B1-%D8%B1%D8%B2%D9%88%D9%84%D9%88%D8%B4%D9%86

همون زمان که این مورد پیش اومد از همین کامپوننت هم استفاده کردم
اصلا ازش خوشم نیومد در حال ماکسیمایز چیزی شبیه به Magnifier ویندوز میشه !!!

sahel65
دوشنبه 24 تیر 1392, 18:26 عصر
فکر می کنم شما هم مشکل sahel65 دارید و با آنچر حل بشه
در این زمینه sample و یا نمونه ای ندارین که ببینیم چی به چی هست؟

به فرض مثال شما یه گرید گذاشتین وسط فرم و خاصیت Dock اونرو هم پیش فرض گذاشتین به این معنی که هیچ نو چینش براش تعرف نکردین با این فرض آیا با Anchor در هر اندازه فرم باز در وسط صفحه خواهد ماند
خب چیکار باید کرد؟
ببینید من دارم گیج میشم؛ گزینه ها داره زیاد میشه؛ من اومدم دوباره یه فرم درست کردم و یک TableLayoutPanel به همراه یک StripMenu گذاشتم؛ الان خوب شده!
حالا میخوام تو سطر دوم Table خودم بیام و یک Datagridview بذارم؛ اینجور که شماها دارید میگید ممکنه اینهم از نظر قرار گیری بهم بریزه!آره؟ اگه از Anchor استفاده کنیم دیگه نیازی به Table نیست؟میخوام یک Datagrid طراحی کنم که بعد از اینکه کاربر روی منو کلیک کرد در سطر دوم جدول ظاهر بشه و لیست شرکتها رو نشون بده.
سطر اول جدول هم که خب طبیعتا منوها قرار دارن دیگه دوستان عزیز.

khokhan
دوشنبه 24 تیر 1392, 20:01 عصر
در این زمینه sample و یا نمونه ای ندارین که ببینیم چی به چی هست؟

خب چیکار باید کرد؟
ببینید من دارم گیج میشم؛ گزینه ها داره زیاد میشه؛ من اومدم دوباره یه فرم درست کردم و یک TableLayoutPanel به همراه یک StripMenu گذاشتم؛ الان خوب شده!
حالا میخوام تو سطر دوم Table خودم بیام و یک Datagridview بذارم؛ اینجور که شماها دارید میگید ممکنه اینهم از نظر قرار گیری بهم بریزه!آره؟ اگه از Anchor استفاده کنیم دیگه نیازی به Table نیست؟میخوام یک Datagrid طراحی کنم که بعد از اینکه کاربر روی منو کلیک کرد در سطر دوم جدول ظاهر بشه و لیست شرکتها رو نشون بده.
سطر اول جدول هم که خب طبیعتا منوها قرار دارن دیگه دوستان عزیز.


ببینید شما اگه در پروژه های حرفه ای و نیمه حرفه ای دقت کرده باشین قاعده بر این است که غیر از فرم اصلی برنامه که معمولا ماگزیمایز هست بقیه فرمها رو با اندازه فیکس شده قرار می دن و اجازه نمی دند کاربر اونها رو بزرگ وکوچک کنه و همه چیز رو به هم بریزه

ویا اینکه مانند اون چیزی که در زبان دلفی مرسومه متد خاصی برای فرمها تعریف کنین تا در هر شرایطی کنترلها خودشونو با اندازه فرم تطبیق بدن

ویا از کلاسهای آماده برای این کار استفاده کنین

Sal_64
دوشنبه 24 تیر 1392, 21:26 عصر
khokhan جان واسه سوال من چیزی به نظرت میرسه

khokhan
دوشنبه 24 تیر 1392, 22:21 عصر
khokhan جان واسه سوال من چیزی به نظرت میرسه

همون نمونه دوستمون رو یه کم تغییر دادم

همه اون چیزایی رو که مد نظرم بود درست وسط فرم قرار دادم حالا یه نگاه بهش بنداز ببین همونی هست که مد نظرت بود :لبخند:
البته در هر دوحالت بزرگ نمایی و کوچک نمایی امتحان کن ببیم چطوریاست

sahel65
سه شنبه 25 تیر 1392, 07:32 صبح
همه اون چیزایی رو که مد نظرم بود درست وسط فرم قرار دادم حالا یه نگاه بهش بنداز ببین همونی هست که مد نظرت بود :لبخند: khokhan جان، همین فرم آخری خوبه؛ لطفا طرز تهیه و کارهایی رو که کردی رو بطور خلاصه بگو تا منم فرمم رو به شیوه شما طراحی کنم؛ حالا بعدا که خواستم حرفه ای ترش کنم یه فکری می کنم. البته فکر کنم نکته کلیدی این ماجرا همون SplitContainer باشه دیگه.
ضمنا به قول شما نباید اجازه بدیم که کاربر فرم رو تغییر سایز بده.:چشمک::چشمک:

مهرداد صفا
پنج شنبه 27 تیر 1392, 11:12 صبح
با سلام.
راههای متداولتر رو دوستان مطرح کردند ولی من معمولا اندازه و مکان کنترلها را نسبت به فرم اصلی و یبقه کنترلها تنظیم میکنم که یک نمونه خیلی ساده در پست 9 تاپیک زیر میبینید:
محل قرار گیری کنترلها... (http://barnamenevis.org/showthread.php?399865)

hassan9027
جمعه 28 تیر 1392, 02:57 صبح
به نظر من این بحث تو این صفحه داغ تره بیشتر بتونه کمکتون کنه
کلینک صفحه (http://barnamenevis.org/showthread.php?53377-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87-%D9%81%D8%B1%D9%85-%D9%85%D8%AA%D9%86%D8%A7%D8%B3%D8%A8-%D8%A8%D8%A7-%D8%B1%D8%B2%D9%88%D9%84%DB%8C%D8%B4%D9%86&p=1824609#post1824609)

Mahmoud.Afrad
جمعه 28 تیر 1392, 03:40 صبح
سلام
خاطرم هست داخل فرم مین یکی از برنامه هام از Tablelayoutpanel استفاده کرده بودم
مثلا با سه ستون و ده ردیف
و در هر ردیف یک باتم گذاشته بودن
اما زمانیکه فرم ماکسیمایز میکردم بین ردیف ها فاصله زیادی ایجاد میشد ، مثلا باتم های ردیف اول و دوم در بالای صفحه قرار میگرفتن و هشت باتم باقیمانده در پایین و وسط صفحه هم بیابون برهوت !

میشه بگید ایراد از کجاست؟
احتمالا درصد اندازه سطر و ستونها رو درست تنظیم نکردید. روی tablelayoutpanel راست کلیک و از طریق edit rows and columns تنظیمش کنید به نحوی که جمع درصد سطرها 100 بشه. برای ستونها هم همینطور. و یا از گزینه های غیر درصدی هم میتونید استفاده کنید.