PDA

View Full Version : مشکل با tab control



بیتافرهی
پنج شنبه 14 شهریور 1387, 10:31 صبح
سلام دوستان
یه مشکلی برام پیش اومده در رابطه با استفاده از TAB CONTROL .
من 11 تا فرم دارم که میخواهم اونارو توی هر یک از صفحاته tab بگذارم ولی مشکلم اینه که نمی خوام تمام کد هایم توی یه صفحه باشد.در صورتی که وقتی از tab کنترل استفاده میکنم
مثلا (شما بیایید توی هر کدام از صفحاتش یک button بگذارید،بعد روی هر کدام از این باتن ها که کلیلک کنید می بینید که تمام کدها در یک صفحه نوشته میشود.
برای رفع این مشکل چه کنم؟

رافعی مهدی
پنج شنبه 14 شهریور 1387, 11:04 صبح
سلام
از دستور region# و endregion# استفاده کنید و کدهاتون رو برای هر یک از Tab Pageها بین اونها قرار بدید. می تونید اسم دلخواهی هم جلوی region بنویسید تا معلوم بشه کدهای داخل اون مربوط به چه صفحه ای هستند.


#region ____________ Arbitrary Name 4 This Region
:
:
:
#endregion

بیتافرهی
پنج شنبه 14 شهریور 1387, 11:40 صبح
1-آیا با این روش کدهایم در صفحات جدا نوشته میشود؟
2-خاصیت روشی که شما گفتید چیه؟
3-شما روش دیگری مثلا استفاده از فرم های mdiparent , panel,mdichild را بلدید؟

mpmsoft
پنج شنبه 14 شهریور 1387, 11:41 صبح
فکر می کنم این هم بشه که فرمهاتو تو قالب UserControl بسازی و بعد روی هر یک از تب ها بذاری

بیتافرهی
پنج شنبه 14 شهریور 1387, 12:03 عصر
لطفا با user control نباشه.
یکی از دوستای گلم به من همچین جوابی داده ولی من نتونستم متوجه بشم وآن را پیاده کنم چون این خواص و کدهایش را نمی دانم کسی میتونه در پیاده کردن این جواب منو کمکو کنه؟



formi ke tab control ruye un hast ro MDI Parent bezarin
va sepas dar har tab (marbut be tab control ye controle PANEL bezarin
.sepas hameye un 11 ta formetun ro khasiyate "FormBorderStyle" unha ro be "None" taghir bedid
.sepas unha ro be unvane Childe forme MDI Parent dar dakhele Panele har tab neshun bedin

رافعی مهدی
پنج شنبه 14 شهریور 1387, 12:21 عصر
1-آیا با این روش کدهایم در صفحات جدا نوشته میشود؟
2-خاصیت روشی که شما گفتید چیه؟
3-شما روش دیگری مثلا استفاده از فرم های mdiparent , panel,mdichild را بلدید؟

1- نه فقط میتونید اونها رو در region های مجزا به صورت دستی طبقه بندی کنید.
2- خیلی ساده است و نیازی به طراحی هر صفحه در یک Form یا UserControl دیگه نیست
3- بله. یک کامپوننت به عنوان Parent در نظر گرفته میشه و Form یا UserContol ای که اون رو برای این Tab Pageخاص طراحی کردید رو در اون Parent نمایش می دید.

رافعی مهدی
پنج شنبه 14 شهریور 1387, 12:25 عصر
استفاده از MDI خیلی با Tab Page به لحاظ ساختاری متفاوت است. اگر می خواهید از MDI استفاده کنید یه MDI Parent Form به پروژه اضافه کنید و فرم های دلخواهتون رو بعنوان Child بهش معرفی کنید.

بیتافرهی
پنج شنبه 14 شهریور 1387, 16:11 عصر
نه فقط میتونید اونها رو در region های مجزا به صورت دستی طبقه بندی کنید.

انجام این کار چه فایده ای دارد؟؟؟؟خوب میتوانم از comment استفاده کنم.!
من به این دلیل میخواهم کدهایم در صفحات جداگانه باشد که دیگر لازم نباشد اسم توابعم را که بین همهی فرم هایم مشترک است را عوض کنم هر چند که دارای اسم یکسان ولی بدنهی متفاوتند.

رافعی مهدی
جمعه 15 شهریور 1387, 00:57 صبح
نه فقط میتونید اونها رو در region های مجزا به صورت دستی طبقه بندی کنید.

انجام این کار چه فایده ای دارد؟؟؟؟خوب میتوانم از comment استفاده کنم.!
من به این دلیل میخواهم کدهایم در صفحات جداگانه باشد که دیگر لازم نباشد اسم توابعم را که بین همهی فرم هایم مشترک است را عوض کنم هر چند که دارای اسم یکسان ولی بدنهی متفاوتند.

درسته دستور region كار خاصي نميكنه، گفتم كه فقط باعث ميشه بتونيد كد رو طبقه بندي كنيد، همين. چون گفتيد تعداد فرمهاتون زياده دو تا راه حل پيشنهاد ميكنم:
1- از MDI استفاده كنيد. براي اين كار به پروژه ي نمونه در فايل هاي ضميمه مراجعه كنيد. حتماً مشكلتون رو حل ميكنه

2- اگر به هر دليلي نخواستيد از MDI استفاده كنيد، براي هر TabPage از يك فرم مجزا استفاده كنيد و بعد اون فرم رو در Page مناسب نمايش بديد.

بیتافرهی
جمعه 15 شهریور 1387, 07:31 صبح
مرسی از توجهتون .ولی شما که اصلا از tab استفاده نکرده اید.شرمنده ،من هنوز درست متوجه نشده ام ،منظور تان را.

رافعی مهدی
جمعه 15 شهریور 1387, 13:42 عصر
مرسی از توجهتون .ولی شما که اصلا از tab استفاده نکرده اید.شرمنده ،من هنوز درست متوجه نشده ام ،منظور تان را.
:اشتباه:

روش MDI كه مخفف Multiple Document Interface هست، چندين فرم رو به عنوان فرزندان يك فرم اصلي كه Parent ناميده مي شود، در نظر مي گيرد.
Tab Controlهم باعث ميشه تا چند فرم رو در صفحات دلخواهي تحت يك كنترل اصلي قرار بديم.
حالا اين دو تا روش رو با هم مقايسه كنيد. هر دو تاشون باعث ميشن بتونيم چند فرم رو در يك كنترل يا فرم اصلي نمايش بديم. ok؟
بنابراين يا از MDI استفاده كنيد يا از Tab Control. گفتم كه اگر به هر دليلي نمي خواهيد از MDI استفاده كنيد، به شكلي كه گفته شد از TabControl استفاده كنيد. هر چند كه در پروژه اي كه براتون فرستادم مي توانستيد يك Tab Control خيلي قشنگ و البته مجازي روي ToolStrip بسازيد كه همون كار Tab رو براتون بكنه و خصوصيات MDI رو هم شامل بشه.

رافعی مهدی
جمعه 15 شهریور 1387, 14:43 عصر
براي استفاده از روش TabControl هم يه پروژه نمونه ميگذارم.
فقط نكته اي كه بايد به اون توجه بشه اينه كه يك فرم Top Level Control محسوب ميشه و نميتونه به عنوان Child يك كنترل ديگه مثل Tab Control به كار بره بنابراين از User Control استفاده مي كنيم ولي با استفاده از دستور


[System.ComponentModel.DesignerCategory("form")]

اون رو مشابه Form در Solution Explorer نمايش مي ديم.

موفق باشيد.



.

sinpin
شنبه 16 شهریور 1387, 11:13 صبح
سلام دوستان
یه مشکلی برام پیش اومده در رابطه با استفاده از TAB CONTROL .
من 11 تا فرم دارم که میخواهم اونارو توی هر یک از صفحاته tab بگذارم ولی مشکلم اینه که نمی خوام تمام کد هایم توی یه صفحه باشد.در صورتی که وقتی از tab کنترل استفاده میکنم
مثلا (شما بیایید توی هر کدام از صفحاتش یک button بگذارید،بعد روی هر کدام از این باتن ها که کلیلک کنید می بینید که تمام کدها در یک صفحه نوشته میشود.
برای رفع این مشکل چه کنم؟

ساده ترين (و يا شايد در اين مورد بهترين) راه حل اين است كه از كلاسهاي چندپاره (partial class ها) استفاده كنيد، در اين صورت ميتوانيد تعدادي فايل داشته باشيد كه هركدام تكميل كننده ي بخشي از يك كلاس باشند.

رافعی مهدی
شنبه 16 شهریور 1387, 14:53 عصر
ساده ترين (و يا شايد در اين مورد بهترين) راه حل اين است كه از كلاسهاي چندپاره (partial class ها) استفاده كنيد، در اين صورت ميتوانيد تعدادي فايل داشته باشيد كه هركدام تكميل كننده ي بخشي از يك كلاس باشند.

البته به نظر من نحوه ی نامگذاری متدها باید به گونه ای باشد که اگر (11 تا که چیزی نیست) 100 تا صفحه از یک TabControlدر یک کلاس قرار بگیرند، تداخل نام پیش نیاید. طراحی درست الگوریتم، به کار گیری کلاس های کمکی، event های مشترک شده برای چندین کامپوننت در یک event و ... راه حل اساسی این مشکل هستند.

بگذریم.
راجع به استفاده از کلاسهای Partial میشه لطفاً بیشتر توضیح بدید!


یک کلاس پارشال رو چطوری میشه مثلاً برای یک فرم به کار برد؟
زمانی که یک فرم به پروژه اضافه میشود (مثلاً Form1) یک کلاس پارشال که خودش از کلاسSystem.Windows.Forms.Form ارث بری میکنه به صورت اتوماتیک به کد برنامه اضافه میشه.
حالا اگر یک کلاس هم خودمون به پروژه به صورت


public partial class Form1 : Form

اضافه کنیم، دیگه کامپوننت های Form1 در اون شناخته نمی شوند.


آیا با استفاده از کلاس پارشال مشکل همنامی توابع حل میشه؟
خانم فرهی گفته بودند:

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

با تشکر

بیتافرهی
شنبه 16 شهریور 1387, 17:43 عصر
میشه بیشتر توضیح بدهید.؟

sinpin
یک شنبه 17 شهریور 1387, 09:12 صبح
یک کلاس پارشال رو چطوری میشه مثلاً برای یک فرم به کار برد؟

میشه بیشتر توضیح بدهید.؟
مثال ضميمه شده را ببينيد
آیا با استفاده از کلاس پارشال مشکل همنامی توابع حل میشه؟
اگر قرار است در يك كلاس توابع همنامي داشته باشيم بايد يكديگر رو overload كنند.