PDA

View Full Version : آموزش ساخت TabControl با تبهای افقی و زیبا



khokhan
سه شنبه 26 دی 1391, 20:17 عصر
سلام دوستان
نمایش تب کنترل به شکل عمودی :

اینطوری

khokhan
سه شنبه 26 دی 1391, 20:35 عصر
از قسمت پراپرتی ها شرو ع می کنم وزیاد وارد جزئیات نمی شم

در قسمت Alignment 'گزینه Right روانتخاب می کنید

در قسمت SizeMode 'گزینه Fixed روانتخاب می کنید

در قسمت DrawMode 'گزینه OwnerDrawFixed روانتخاب می کنید

در قسمت ItemSize عرض وطول تب هار به دلخواه ومتناسب با برنامه خودتون قرار می دهید


ادامه دارد .............

khokhan
سه شنبه 26 دی 1391, 20:55 عصر
خوب پس از اینکه پراپرتی ها رو تنظیم کردین نوبت به شخصی سازی کنترل می رسه

برای این کار لازمه که از قسمت پراپرتی tabControl گزینه DrawItem رو انتخاب کنیدوبه ترتیبی

که گفته خواهد شد اقدام کنید

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

اینطوری :


Graphics g = e.Graphics;
Brush _TextBrush;





بعد چارچوب زبانه هارو تعریف می کنیم

اینطوری :


TabPage _TabPage = tabControl1.TabPages[e.Index];


Rectangle _TabBounds = tabControl1.GetTabRect(e.Index);

if(e.State == DrawItemState.Selected)


حالا نوبت می رسه به طراحی رنگ پس زمینه ونوشته های زبانه ها با اعمال تغییرات در این قسمت می تونید ترنگ زمینه

و نوشته ها رو ( در حالت عادی و انتخاب شده تغییر دهید )

اینطوری :


TextBrush = new SolidBrush(Color.Red);
g.FillRectangle(Brushes.Gray, e.Bounds);
}
else
{
_TextBrush = new System.Drawing.SolidBrush(e.ForeColor);
e.DrawBackground();
}

khokhan
سه شنبه 26 دی 1391, 21:22 عصر
نوبت می رسه به اختصاص فونت مخصوص زبانه ها در این قسمت هرفونتی رو که برای زبانه ها اختصاص بدین نوشته های داخل زبانه ها با اون فونت نشان داده می شوند

اینطوری :


Font _TabFont = new Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Pixel);

khokhan
سه شنبه 26 دی 1391, 21:26 عصر
اگر بخواهید نوشته ها در درون زبانه ها وسط چین باشند واز هر جهت در وسط چهاچوب زبانه درج گردند اینطور عمل می کنید که :


StringFormat _StringFlags = new StringFormat();
_StringFlags.Alignment = StringAlignment.Center;
_StringFlags.LineAlignment = StringAlignment.Center;
g.DrawString(_TabPage.Text, _TabFont, _TextBrush,
_TabBounds, new StringFormat(_StringFlags));
}

تمام شد به همین راحتی صاحب یکTabControl شدید که می تونید در فرم اصلی برنامه به عنوان منوبار هم ازش استفاده کنین کی به کیه :لبخند:

khokhan
سه شنبه 26 دی 1391, 21:34 عصر
در نهایت کل دستورات در رویداد DrawItem به این شکل باید باشد :



private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Brush _TextBrush;

// اختصاص آیتمها در مجموعه
TabPage _TabPage = tabControl1.TabPages[e.Index];

// تعریف چهارچوب زبانه ها
Rectangle _TabBounds = tabControl1.GetTabRect(e.Index);

if (e.State == DrawItemState.Selected)
{
// تعریف رنگ زمینه برای زبانه ها .
_TextBrush = new SolidBrush(Color.MediumBlue);
g.FillRectangle(Brushes.Gray, e.Bounds);
}
else
{
_TextBrush = new System.Drawing.SolidBrush(e.ForeColor);
e.DrawBackground();
}

// اختصاص فونت دلخواه به نوشته های زبانه ها
Font _TabFont = new Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Pixel);

// وسط چین کردن نوشته های زبانه ها
StringFormat _StringFlags = new StringFormat();
_StringFlags.Alignment = StringAlignment.Center;
_StringFlags.LineAlignment = StringAlignment.Center;
g.DrawString(_TabPage.Text, _TabFont, _TextBrush,
_TabBounds, new StringFormat(_StringFlags));
}

khokhan
سه شنبه 26 دی 1391, 21:40 عصر
بفرمائید این هم نمونه برنامه :لبخند:

امید وارم مفید بوده باشد

khokhan
سه شنبه 26 دی 1391, 22:36 عصر
این بار نحوه بکار گیری backgroundworker با طول مدت آپدیت شدن یکDataGridView رو خواهم گذاشت

FreeMagic
چهارشنبه 27 دی 1391, 00:44 صبح
میگم به جای عنوان تب ها میشه از عکس استفاده کرد؟
ولی هر تب عکس خودش (یعنی عکس همه تب ها یکی نیست)
و در حالت انتخاب شده و انتخاب نشده هم عکس جداگونه باشه
.
در ضمن اگه اگه خواستید پست بدید که راهنمایی میخواین باید بگم که بله:لبخند: همراه با کدش
با تشکر فراوان