PDA

View Full Version : سوال: به وجود آوردن 'x' برای بستن tabpage



InvBoy01001
شنبه 22 آبان 1395, 09:41 صبح
سلام
من یه winform دارم که تووش از tabcontroler به صورت داینامیک tabpage میسازم
مشکل من اینجاست که میخوام روی هر tabpage یه 'x' برای بستن اون tabpage به وجود بیارم
تمام تب های من به صورت dynamic ساخته میشن

حسین.کاظمی
شنبه 22 آبان 1395, 12:32 عصر
سلام دوست عزیز
یه دکمه به شکل ضربدر در هدر هر تب اضافه کن و با فشار دادن اون تب رو ببند
1 - در پراپرتی Drawmode گزینه OwnerDrawFixed رو ست کن
2 - بعد در رویداد DrawItem تب کنترل این کد رو قرار بده :

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{


e.Graphics.DrawString("x", e.Font, Brushes.Black, e.Bounds.Right - 15, e.Bounds.Top + 4);
e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, e.Font, Brushes.Black, e.Bounds.Left + 12, e.Bounds.Top + 4);
e.DrawFocusRectangle();
}


3 - در انتها و در رویداد MouseDown تب کنترل این کد رو می نویسی تا تب مربوطه رو ببنده :

private void tabControl1_MouseDown(object sender, MouseEventArgs e)
{
if (tabControl1.TabCount > 1)
{
for (int i = 0; i < this.tabControl1.TabPages.Count; i++)
{
Rectangle r = tabControl1.GetTabRect(i);

Rectangle closeButton = new Rectangle(r.Right - 15, r.Top + 4, 9, 7);
if (closeButton.Contains(e.Location))
{
if (MessageBox.Show("مطمئنی از بستن", "اخطار", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
this.tabControl1.TabPages.RemoveAt(i);
break;
}
}
}
}
}


و برای اینکه نوشته های هدر با علامت ضربدر قاطی نشه یه خورده عرض هدر ها رو بیشتر کن ..... اینطوری :

[CSHARP]
tabControl1.SizeMode = TabSizeMode.Fixed;
tabControl1.ItemSize = new Size(tabControl1.Width/2 / tabControl1.TabCount, 0);