cop y bài mình viết bên vn-zoom luôn nghe
cái này mình làm được rồi(nó chung code thì copy gắp nơi mỗi nơi mỗi ít bỏ vào chứ mình không viết
đầu tiên bạn tảo phương thức khỏi tạo tabcontrol
(mỗi lần bạn nhấn gọi tab nó sẽ gọi phương thức này
tabContronl là tên cái tab bạn kéo vào đó, string text là chuỗi của tabpages (tên) , form là cái form bạn cho vào trong tab ấy
Code:
public void TabCreating(TabControl TabControl, string Text, Form Form)
{
int Index = KiemTraTonTai(TabControl, Text);
if (Index >= 0)
{
TabControl.SelectedTab = TabControl.TabPages[Index];
TabControl.SelectedTab.Text = Text;
}
else
{
TabPage TabPage = new TabPage { Text = Text };
TabControl.TabPages.Add(TabPage);
TabControl.SelectedTab = TabPage;
Form.TopLevel = false;
Form.Parent = TabPage;
// Form.MdiParent = this;
Form.Show();
Form.Dock = DockStyle.Fill;
}
}
phương thức này dùng để kiểm tra tab đã tồn tại chưa (tab đã mở chưa) bằng cáh kiểm tra cái tên của tabpagse ấy
Code:
static int KiemTraTonTai(TabControl TabControlName, string TabName)
{
int temp = -1;
for (int i = 0; i <TabControlName.TabPages.Count; i++)
{
if (TabControlName.TabPages[i].Text == TabName)
{
temp = i;
break;
}
}
return temp;
}
thế là xong nhé,
ví dụ bạn có một nuot button bạn ấn nút đó để gọi tab + form lên
thì bạn làm như sau,
bạn khởi tạo một đối tượng (đối tưởng này là cái form bạn add vào ấy)
ví dụ
Code:
Form1=frmf1=new Form1(); // đặt thuộc tính FormborderStyle =none nghe
gọi tabpages
TabCreating(tên cái tabcontrol bạn kéo ở toolbox nhé,"Hiện Thị Form1", frmf1);
thế là xong cách tạo tabcontrol
bây giờ bạn có một vấn đề cần giải quyết,, đó là làm sao để đóng tabpages (vì trong tabcontrol của visual c# không có nút close , bắt buộc bạn phải vẽ nút đó bằng cách dùng hàm vẽ chuôi,
sau đó bạn bât sự kiện nhấn chuột tại vùng tọa đô bạn vẽ cái nút colose đó để thực hiện tắt nó đi, )
và đây là phương thức vẽ nút X(close) ấy mình có chỉnh sủa một chút đó là mình cho nó vẽ từ tabpage thứ 2 trở lên
nên mình đặt điều kiện if(e.Index>0) vì index của tabpage được đanh từ o trở đi,(vì tabpage mình làm bàn hệ thống, luon hiện thị không cho phép xóa, bạn không cần thì bạn xóa nó đi
Code:
private void tabControlQuanLy_DrawItem(object sender, DrawItemEventArgs e)
{
Font closefont = new Font(e.Font.FontFamily, e.Font.Size, FontStyle.Bold);
Font titlefont = new Font(e.Font.FontFamily, e.Font.Size, FontStyle.Italic);
if (e.Index > 0)
{
e.Graphics.DrawString("X" , closefont, Brushes.Blue, e.Bounds.Right - 15, e.Bounds.Top + 5);
}
e.Graphics.DrawString(this.tabControlQuanLy.TabPages[e.Index].Text, titlefont, Brushes.Black, e.Bounds.Left, e.Bounds.Top + 5);
}
trong sự kiện MouseDown bạn cho mấy cái này vào , nếu bạn cho tắt từ tabpage thứ 1 thì bạn cho i chạy từ 0 nhé ở đây mình cho chạy từ 1
Code:
private void tabControlQuanLy_MouseDown(object sender, MouseEventArgs e)
{
for (int i = 1; i < this.tabControlQuanLy.TabPages.Count; i++)
{
Rectangle rPage = tabControlQuanLy.GetTabRect(i);
Rectangle closeButton = new Rectangle(rPage.Right - 15, rPage.Top + 5, 10, 10);
if (closeButton.Contains(e.Location))
{
if (MessageBox.Show("Bạn Có Muốn Tắt Tab Này?", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
this.tabControlQuanLy.TabPages.RemoveAt(i);
break;
}
}
}
}
HẾT, chưa đọc câu hỏi của bạn đầu tiên, nhưng thấy tiêu đề vậy đoán bạn thắc mắc vấn đề này,
không phải thì tối lên minh sẽ xóa, ok