Windows 窗体 - 向 TabPage 添加一个关闭按钮 header
WindowsForms - add a close button to TabPage header
我想向 header 我的 TabPages 添加一个关闭按钮。因此,就像浏览器选项卡一样,它可以从 TabControl 中删除。
预先感谢您的宝贵时间。
编辑:
现在,我像下面的代码一样通过中键单击来处理关闭,但我想在 tabPage header.
上为我的用户提供一个友好的关闭按钮
private void tabControl1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != System.Windows.Forms.MouseButtons.Middle)
return;
for (int i = 0; i < MainTabControl.TabPages.Count; i++)
{
if (this.MainTabControl.GetTabRect(i).Contains(e.Location))
{
this.MainTabControl.TabPages.RemoveAt(i);
return;
}
}
}
编辑
我发现我的问题被重复并正确回答 there。
默认 WF TabControl
没有此功能。
您的 UI 上可以有另一个按钮,这样您就可以删除当前选项卡。
如果需要在选项卡上有按钮,你可以覆盖"OnPaint"方法并自己绘制或使用其他选项卡控件。
还有免费的选项卡控件:
您可以通过调用此过程(未测试)在每个选项卡上添加一个关闭按钮:
private List<Button> closeButtons = new List<Button>()
private void SetTabButtons()
{
// first remove all existing buttons
for (int i=0;i<closeButtons.Count;i++) closeButtons[i].Parent=null ;
closeButtons.Clear() ;
// create the close buttons
for (int i=0;i<theTabControl.TabPages.Count;i++)
{
// add some spaces to tab text for the close button
theTabControl.TabPages[i].Text = theTabControl.TabPages[i].Text+" " ;
Rectangle rect=theTabControl.GetTabRect(i);
NewControl.Location = new System.Drawing.Point(X, Y);
Button b = new Button() ;
button.Text = "x" ;
button.AutoSize = true;
button.Location = new Point(rect.Right-button.Width-3,rect.top+3) ;
button.Parent = theTabControl ;
button.tag = i ;
button.Click +=CloseTab_ButtonClick ;
closeButtons.Add(button) ;
}
private void CloseTab_ButtonClick(object sender, EventArgs e)
{
int theTabPageIndex = (int)((Button)sender).Tag) ;
// remove the tabpage here
...
// reset the buttons
setTabButtons() ;
}
我想向 header 我的 TabPages 添加一个关闭按钮。因此,就像浏览器选项卡一样,它可以从 TabControl 中删除。 预先感谢您的宝贵时间。
编辑:
现在,我像下面的代码一样通过中键单击来处理关闭,但我想在 tabPage header.
上为我的用户提供一个友好的关闭按钮 private void tabControl1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != System.Windows.Forms.MouseButtons.Middle)
return;
for (int i = 0; i < MainTabControl.TabPages.Count; i++)
{
if (this.MainTabControl.GetTabRect(i).Contains(e.Location))
{
this.MainTabControl.TabPages.RemoveAt(i);
return;
}
}
}
编辑
我发现我的问题被重复并正确回答 there。
默认 WF TabControl
没有此功能。
您的 UI 上可以有另一个按钮,这样您就可以删除当前选项卡。
如果需要在选项卡上有按钮,你可以覆盖"OnPaint"方法并自己绘制或使用其他选项卡控件。
还有免费的选项卡控件:
您可以通过调用此过程(未测试)在每个选项卡上添加一个关闭按钮:
private List<Button> closeButtons = new List<Button>()
private void SetTabButtons()
{
// first remove all existing buttons
for (int i=0;i<closeButtons.Count;i++) closeButtons[i].Parent=null ;
closeButtons.Clear() ;
// create the close buttons
for (int i=0;i<theTabControl.TabPages.Count;i++)
{
// add some spaces to tab text for the close button
theTabControl.TabPages[i].Text = theTabControl.TabPages[i].Text+" " ;
Rectangle rect=theTabControl.GetTabRect(i);
NewControl.Location = new System.Drawing.Point(X, Y);
Button b = new Button() ;
button.Text = "x" ;
button.AutoSize = true;
button.Location = new Point(rect.Right-button.Width-3,rect.top+3) ;
button.Parent = theTabControl ;
button.tag = i ;
button.Click +=CloseTab_ButtonClick ;
closeButtons.Add(button) ;
}
private void CloseTab_ButtonClick(object sender, EventArgs e)
{
int theTabPageIndex = (int)((Button)sender).Tag) ;
// remove the tabpage here
...
// reset the buttons
setTabButtons() ;
}