w通知 C# 自定义选项卡控件关闭按钮



我有一个自定义选项卡控件,内置了一个关闭按钮,它运行良好,但不会关闭最后一个选项卡,我很想更改选项卡的样式以匹配 chrome 的样式。 我的问题是我无法关闭所有表单,总有最后一个无法关闭的表单。

这是我编写的重写代码

public static Rectangle GetRTLCoordinates(Rectangle container, Rectangle drawRectangle)
{
return new Rectangle(
container.Width - drawRectangle.Width - drawRectangle.X,
drawRectangle.Y,
drawRectangle.Width,
drawRectangle.Height);
}
Image CloseImage;
private void frmMain_Load(object sender, EventArgs e)
{
tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
tabControl1.DrawItem += tabControl1_DrawItem;
CloseImage = Pharmacy_Management.Properties.Resources.Close;
tabControl1.Padding = new Point(10, 3);
}
private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
{
try
{
var tabRect = this.tabControl1.GetTabRect(e.Index);
tabRect.Inflate(-2, -2);
var imageRect = new Rectangle(tabRect.Right - CloseImage.Width,
tabRect.Top + (tabRect.Height - CloseImage.Height) / 2,
CloseImage.Width,
CloseImage.Height);
var sf = new StringFormat(StringFormat.GenericDefault);
if (this.tabControl1.RightToLeft == System.Windows.Forms.RightToLeft.Yes &&
this.tabControl1.RightToLeftLayout == true)
{
tabRect = GetRTLCoordinates(this.tabControl1.ClientRectangle, tabRect);
imageRect = GetRTLCoordinates(this.tabControl1.ClientRectangle, imageRect);
sf.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
}
e.Graphics.DrawString(this.tabControl1.TabPages[e.Index].Text, this.Font, Brushes.Black, tabRect, sf);
e.Graphics.DrawImage(CloseImage, imageRect.Location);
}
catch (Exception) { }
}
private void tabControl1_MouseClick(object sender, MouseEventArgs e)
{
for (var i = 1; i < this.tabControl1.TabPages.Count; i++)
{
var tabRect = this.tabControl1.GetTabRect(i);
tabRect.Inflate(-2, -2);
var imageRect = new Rectangle(tabRect.Right - CloseImage.Width,
tabRect.Top + (tabRect.Height - CloseImage.Height) / 2,
CloseImage.Width,
CloseImage.Height);
if (imageRect.Contains(e.Location))
{
this.tabControl1.TabPages.RemoveAt(i);
break;
}
}
}

这是我调用新窗体并在新面板中显示的代码

private void button4_Click(object sender, EventArgs e)
{
FRM_AMAT frm = new FRM_AMAT();
tabControl1.Visible = true;
frm.TopLevel = false;
frm.Visible = true;
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
TabPage tabPage = new TabPage();
tabPage.Text = frm.Text;
tabPage.Controls.Add(frm);
tabControl1.Controls.Add(tabPage);
tabControl1.SelectedTab = tabPage;
frm.Show();
}
for (var i = 0; i < this.tabControl1.TabPages.Count; i++)
{
var tabRect = this.tabControl1.GetTabRect(i);
tabRect.Inflate(-2, -2);
var imageRect = new Rectangle(tabRect.Right - CloseImage.Width,
tabRect.Top + (tabRect.Height - CloseImage.Height) / 2,
CloseImage.Width,
CloseImage.Height);
if (imageRect.Contains(e.Location))
{
this.tabControl1.TabPages.RemoveAt(i);
if (i == 0)
{
this.tabControl1.Visible = false;
}
break;
}
}

var i = 0,这将关闭最后一个选项卡:D :D :D

最新更新