امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش کار با کنترل TabStrip
نویسنده پیام
mojtabamalaekeh آفلاین
کاربر با تجربه
****

ارسال‌ها: 566
موضوع‌ها: 104
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 1378
( 631 تشکر در 223 ارسال )
ارسال: #1
آموزش کار با کنترل TabStrip
به نام خدا

توی بخش Components دو گزینه با عناوین زیر وجود داره:
Microsoft Windows Common Controls 5.0 (SP2)
Microsoft Windows Common Controls 6.0
اگه میخواید هنگام استفاده از XP Manifest یا به قول خودمون تم ایکس پی، کنترل Tab بکار رفته در برنامه خودش رو با Theme ویندوز هماهنگ کنه باید از نسخه 5.0 استفاده کنید.
[تصویر:  tbs_XPMan.jpg]

کنترل TabStrip قابلیت Container بودن رو نداره و نمی تونید Object ها رو روی اون قرار بدید.
کد:
Set Command1.Container = TabStrip1 'Error
پس به فکر این نباشید که توی هر کدوم از صفحاتش تعدادی Object قرار بدید.
در واقع این کنترل یه ظاهر زیبا به فرم شما میده و به شما میگه که انتخاب کاربر برگه شماره چند بوده و شما با توجه به شماره برگه (Tab) باید یه سری Object به کاربر نشون بدید.
بهترین راه اینه که به تعداد برگه های مورد نیاز، شیء Frame یا PictureBox روی فرمتون قرار بدید، و Object های هر صفحه رو توی یک Frame یا PictureBox قرار بدید.
چرا Frame یا PictureBox؟ چون این دو شیء قابلیت Container بودن رو دارند.
[تصویر:  tbs_DesignTime.jpg]

بعد توی رویداد Click شیء TabStrip تعیین کنید که تمام Frame یا PictureBox ها مخفی بشن و فقط Frame یا PictureBox مورد نظر نمایش داده بشه.
کد:
Private Sub TabStrip1_Click()
Dim i As Integer
For i = 1 To TabStrip1.Tabs.Count
picTabs(i - 1).Visible = TabStrip1.Tabs(i).Selected
Next
End Sub
در زمان اجرا باید BorderStyle این PictureBox ها رو برابر صفر قرار بدید تا لبه هاشون صاف به نظر بیاد. موقعیتشون رو هم باید تنظیم کنید طوری که انگار Object ها روی TabStrip هستند.
کد:
Private Sub Form_Load()
Dim i As Integer
For i = 0 To picTabs.UBound
picTabs(i).Visible = False
picTabs(i).BorderStyle = 0
picTabs(i).Move TabStrip1.Left + 15, TabStrip1.Top + 375
Next
TabStrip1_Click
End Sub
دوست دارین TabStrip شما هم مثل TabStrip های استاندارد ویندوز باشه طوری که بشه با کلیدهای Ctrl+Tab و Ctrl+Shift+Tab بین برگه ها حرکت کنید؟
اول توی Form_Load بنویسید Me.KeyPreview = True
کد:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyTab And Me.ActiveControl.Name = TabStrip1.Name Then
If Shift = vbCtrlMask Then
If TabStrip1.SelectedItem.Index < TabStrip1.Tabs.Count Then
Set TabStrip1.SelectedItem = TabStrip1.Tabs(TabStrip1.SelectedItem.Index + 1)
Else
Set TabStrip1.SelectedItem = TabStrip1.Tabs(1)
End If
ElseIf Shift = vbCtrlMask + vbShiftMask Then
If TabStrip1.SelectedItem.Index > 1 Then
Set TabStrip1.SelectedItem = TabStrip1.Tabs(TabStrip1.SelectedItem.Index - 1)
Else
Set TabStrip1.SelectedItem = TabStrip1.Tabs(TabStrip1.Tabs.Count)
End If
End If
End If
End Sub
میدونید خاصیت SelectedItem از چه نوعیه؟ از نوع Tab
شما نمیتونید متغیری از نوع Tab تعریف کنید! چون Tab یکی از کلمات Reserve شده زبان ویژوال بیسیک است.
کد:
Dim T As Tab 'Syntax Error
Dim T As New Tab 'Syntax Error
خودش نوشته است:اگه میخواید هنگام استفاده از XP Manifest یا به قول خودمون تم ایکس پی، کنترل Tab بکار رفته در برنامه خودش رو با Theme ویندوز هماهنگ کنه باید از نسخه 5.0 استفاده کنید.
بهتره هنگام استفاده از کنترل TabStrip اصلا از XP Manifest استفاده نکنید! چون زمینه TabStrip مطابق با Theme ویندوز رنگ میشه ولی PictureBox یا Frame شما رنگ زمینه اش متفاوت با TabStrip است.
چندتا راه حل هست که به بن بست میخورن.
1ـ رسم زمینه TabStrip توی PictureBox یا Frame.
مشکل: کنترل TabStrip خاصیت hWnd نداره.
2- استفاده نکردن از Container.
مشکل: اشیائی مثل Label و Line و Shape نمیتونن روی TabStrip قرار بگیرن. امتحان کنید.
3- Object ها رو با تابع SetParent داخل TabStrip قرار بدیم.
مشکل: اشیائی مثل Label و ComboBox و TextBoxخاصیت hWnd ندارند.

راه حل مشکلات بالا:
از Component دیگه ای با عنوان Microsoft Tabbed Dialog Control 6.0 استفاده کنید که برگه هاش خاصیت Container بودن رو دارند. و زمان طراحی میتونید بین برگه های حرکت کنید و Object ها رو روی برگه های مختلفش بچینید. علاوه بر این با زدن کلیدهای Ctrl+Tab و Ctrl+Shift+Tab خودش بین برگه ها حرکت می کنه.
نکته: OptionButton هایی که توی برگه های مختلف شیء SSTab (همون Component Tabbed Dialog) میذارید با این که توی برگه های جداگانه هستند ولی یک گروه هستند و با انتخاب هر کدومشون اون یکی از انتخاب در میاد. پس اگر از OptionButton توی SSTab استفاده می کنید، OptionButton های هر برگه رو توی یک Container جداگانه قرار بدید. ترجیحاً توی یک PictureBox

فقط توجه کنید که هنگام استفاده از Theme XP اشیاء CommandButton و OptionButton رو داخل شیء Frame نذارید چون زمینشون سیاه میشه.

اگه مفید بود پس 034


فایل‌(های) پیوست شده
.zip   TabStrip Sample.zip (اندازه: 10.38 KB / تعداد دفعات دریافت: 233)


(آخرین ویرایش در این ارسال: ۰۶-آبان-۱۳۸۷, ۰۱:۴۴:۵۴، توسط mojtabamalaekeh.)
۰۶-آبان-۱۳۸۷, ۰۱:۲۵:۲۹
ارسال‌ها
پاسخ
تشکر شده توسط : saeedsmk, Di Di, xsalamx, nilda


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] کنترل مقدار نوع داده که از تکس باکس فرم دریافت می شود eppagh 2 3,307 ۰۲-مرداد-۱۳۹۴, ۱۰:۵۴:۰۰
آخرین ارسال: Ghoghnus
Question [سوال] کنترل پنجره Save as اکسل eppagh 3 2,806 ۱۳-مرداد-۱۳۹۳, ۱۴:۰۶:۰۰
آخرین ارسال: babyy
Exclamation کنترل برنامه ها.... dreamvbfox 9 8,525 ۲۸-مهر-۱۳۹۲, ۱۵:۴۵:۱۵
آخرین ارسال: setroyd
  سوال در مورد کنترل Webbrowser Cr4ShD4Y 2 3,011 ۱۶-تير-۱۳۹۲, ۱۱:۴۱:۰۹
آخرین ارسال: kimiafars
  انتخاب چند گزینه در file name در کنترل comman dialog hamed_Arfaee 2 3,059 ۲۹-خرداد-۱۳۹۲, ۱۰:۳۷:۳۰
آخرین ارسال: hamed_Arfaee
  [سوال] مشکل در ورود به روم با کنترل ymsg emsoft 0 2,151 ۲۸-تير-۱۳۹۰, ۱۷:۰۸:۱۲
آخرین ارسال: emsoft
Question [سوال] گرفتن هندل یک کنترل برنامه خارجی HamedFaa 2 3,287 ۱۱-اردیبهشت-۱۳۹۰, ۱۲:۲۹:۰۳
آخرین ارسال: HamedFaa
  برنامه نویسی کنترل microsoft comm control 6.0 miladseven 0 2,443 ۰۸-اسفند-۱۳۸۹, ۲۲:۰۳:۵۵
آخرین ارسال: miladseven
  کنترل مقدار ارسال و دریافت داده از اینترنت vz67 0 2,376 ۱۴-بهمن-۱۳۸۹, ۱۶:۴۹:۲۲
آخرین ارسال: vz67
  کنترل وینسک kimiafars 2 3,200 ۰۸-شهریور-۱۳۸۹, ۰۹:۲۱:۳۰
آخرین ارسال: kimiafars

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS