PDA

View Full Version : سوال: نمایش فرم در Tabcontrol



iman.programmer
دوشنبه 03 اسفند 1394, 06:16 صبح
سلام دوستان

میخوام وقتی که کاربر میخواد یک فرم از پروژه را اجرا کنه ، به جای اینکه فرم در یک صفحه جدید نمایش داده بشه تو همون فرم اصلی درون یک tabcontrol فرم را نمایش بده

حالا اگر کاربر چندین فرم را اجرا کرد این فرم ها در تب های مختلف از tabcontrol نمایش داده بشن

در نهایت کاربر بتونه فرم هایی که احتیاج نداره را ببنده

Davidd
دوشنبه 03 اسفند 1394, 07:43 صبح
سلام ایجاد و حذف تب در TabControl که کاری نداره فقط نحوه نمایش فرم در تب میمونه که به این صورته:
Form2 frm = new Form2();
frm.TopLevel = false;
frm.Visible = true;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
tabControl1.TabPages[0].Controls.Add(frm);

iman.programmer
دوشنبه 03 اسفند 1394, 08:00 صبح
حالا نحوه حذفش چطور میشه ؟ کاربر الان میخواد فرم را ببنده چطور میتوه ؟

ebrahim.rayatparvar
دوشنبه 03 اسفند 1394, 11:48 صبح
برای راحتی کار بهتره از کامپوننت استفاده کنی هم راحتی هم امکانات بالا و سرعت در برنامه نوئیسی که هزینه وقت خیلی مهمه. ولی نه اگه میخوای با TabControl خود VS این کار رو انجام بدی لینک های زیر رو ببین :

لینک1 (http://stackoverflow.com/questions/803540/customizing-a-tabcontrol-for-the-closing-of-individual-tabs)
لینک2 (http://stackoverflow.com/questions/29703235/adding-close-button-in-tabpage-tab-caption-in-c-sharp-windows-form)

ولی برای نوشتن برنامه زیبا و درگیر نشدین با این کدها بهتره که از کامپوننت هایی مثل Devexpress,telerik,DevConmponnet و.... که برای برنامه نویسی حرفه ای هم استفاده میشن استفاده کنی.

rahmatipoor
سه شنبه 04 اسفند 1394, 06:02 صبح
ولی برای نوشتن برنامه زیبا و درگیر نشدین با این کدها بهتره که از کامپوننت هایی مثل Devexpress,telerik,DevConmponnet و.... که برای برنامه نویسی حرفه ای هم استفاده میشن استفاده کنی.

ببخشید مگه این کامپوننتها کنترل خاصی برای نمایش دادن فرم در قالب تب کنترل دارن؟

iman.programmer
سه شنبه 04 اسفند 1394, 13:26 عصر
دوستان من هنوز به نتیجه نرسیدما

khokhan
سه شنبه 04 اسفند 1394, 14:16 عصر
دوستان من هنوز به نتیجه نرسیدما

خیلی آسونه یه دکمه به شکل ضربدر در هدر هر تب اضافه کن و با فشار دادن اون تب رو ببند
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;
}
}
}
}
}
و برای اینکه نوشته های هدر با علامت ضربدر قاطی نشه یه خورده عرض هدر ها رو بیشتر کن ..... اینطوری :


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