winform tabpage 绘制关闭按钮点击关闭事件和双击tab关闭页面
2015-07-09 14:03
411 查看
ps:尝试下新的编辑器,看看啥感觉哈。
‘
说明:
1.button1用于添加tab页面
2.button2用户删除当前tab页面
3.tabcontrol 命名MainTabControl
关键部分:绘制关闭的“x”按钮点击关闭当前tab页面,双击tab标签关闭tab页面。
绘制”x”代码部分(网络上拷贝)
点击”x”关闭tab页面
双击选项卡关闭tab页面
button1,button2 click事件
form load事件
代码都比较简单 流程也简单 效果也就不是特别好看 做一个记录,免得忘记了
‘
说明:
1.button1用于添加tab页面
2.button2用户删除当前tab页面
3.tabcontrol 命名MainTabControl
关键部分:绘制关闭的“x”按钮点击关闭当前tab页面,双击tab标签关闭tab页面。
绘制”x”代码部分(网络上拷贝)
//绘制“X”号即关闭按钮 private void MainTabControl_DrawItem(object sender, DrawItemEventArgs e) { try { Rectangle myTabRect = this.MainTabControl.GetTabRect(e.Index); //先添加TabPage属性 e.Graphics.DrawString(this.MainTabControl.TabPages[e.Index].Text , this.Font, SystemBrushes.ControlText, myTabRect.X + 2, myTabRect.Y + 2); //再画一个矩形框 using (Pen p = new Pen(Color.White)) { myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2); myTabRect.Width = CLOSE_SIZE; myTabRect.Height = CLOSE_SIZE; e.Graphics.DrawRectangle(p, myTabRect); } //填充矩形框 Color recColor = e.State == DrawItemState.Selected ? Color.White : Color.White; using (Brush b = new SolidBrush(recColor)) { e.Graphics.FillRectangle(b, myTabRect); } //画关闭符号 using (Pen objpen = new Pen(Color.Black)) { //"\"线 Point p1 = new Point(myTabRect.X + 3, myTabRect.Y + 3); Point p2 = new Point(myTabRect.X + myTabRect.Width - 3, myTabRect.Y + myTabRect.Height - 3); e.Graphics.DrawLine(objpen, p1, p2); //"/"线 Point p3 = new Point(myTabRect.X + 3, myTabRect.Y + myTabRect.Height - 3); Point p4 = new Point(myTabRect.X + myTabRect.Width - 3, myTabRect.Y + 3); e.Graphics.DrawLine(objpen, p3, p4); } e.Graphics.Dispose(); } catch(Exception ex) { MessageBox.Show(ex.Message); } } //=======================================================================
点击”x”关闭tab页面
//关闭按钮功能 private void MainTabControl_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { int x = e.X, y = e.Y; //计算关闭区域 Rectangle myTabRect = this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex); myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2); myTabRect.Width = CLOSE_SIZE; myTabRect.Height = CLOSE_SIZE; //如果鼠标在区域内就关闭选项卡 bool isClose = x > myTabRect.X && x < myTabRect.Right && y > myTabRect.Y && y < myTabRect.Bottom; if (isClose == true) { this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab); } } }
双击选项卡关闭tab页面
private void MainTabControl_MouseDoubleClick(object sender, EventArgs e) { MainTabControl.TabPages.Remove(MainTabControl.SelectedTab); }
button1,button2 click事件
private void button1_Click(object sender, EventArgs e) { string title = "text"; bool ifExits = false; foreach (TabPage tb in this.MainTabControl.TabPages) { if (tb.Text == title) { ifExits=true; } } if (!ifExits) { TabPage tabtage = new TabPage(); tabtage.Text = title; tabtage.ToolTipText = title; TemplateForm form = new TemplateForm(); form.FormBorderStyle = FormBorderStyle.None; //隐藏子窗体边框(去除最小花,最大化,关闭等按钮) form.TopLevel = false; //指示子窗体非顶级窗体 tabtage.Controls.Add(form);//将子窗体载入panel form.Show(); MainTabControl.TabPages.Add(tabtage); MainTabControl.SelectedTab = tabtage; //image = new Bitmap(TestTabPageTabControl.Properties.Resources.box_okay); } } private void button2_Click(object sender, EventArgs e) { if (MainTabControl.SelectedTab != null) { MainTabControl.TabPages.Remove(MainTabControl.SelectedTab); } }
form load事件
private void testForm_Load(object sender, System.EventArgs e) { //清空控件 //this.MainTabControl.TabPages.Clear(); //绘制的方式OwnerDrawFixed表示由窗体绘制大小也一样 this.MainTabControl.DrawMode = TabDrawMode.OwnerDrawFixed; this.MainTabControl.Padding = new System.Drawing.Point(CLOSE_SIZE, CLOSE_SIZE / 2); this.MainTabControl.DrawItem += new DrawItemEventHandler(this.MainTabControl_DrawItem); this.MainTabControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown); this.MainTabControl.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDoubleClick); }
代码都比较简单 流程也简单 效果也就不是特别好看 做一个记录,免得忘记了
相关文章推荐
- 解决安装完centos6.6之后/etc/sysconfig/目录下没有iptables 的问题
- Sharded数据分片定位数据
- java--面向对象
- Swift教程之NSDictionary
- GET 和 POST (HTTP请求报文和HTTP响应报文)
- jdk安装错误error could not open jvm.cfg
- SQL中char、varchar、nvarchar的区别
- SQLServer学习笔记系列1
- ESX与ESXi管理员必备25个命令
- GRE写作必备句型
- java--选择排序
- html5 的 details 标记 ,summary标记,布局
- python 列表推导 求100内的素数
- HDU 4386 Quadrilateral(数学啊)
- Maven中央仓库构建上传心得
- BZOJ 3295 [Cqoi2011]动态逆序对 树状数组套线段树
- eclipse Kepler 安装 SVN Plugin + Groovy Plugin
- 智者1号写字楼众筹:颠覆式的写字楼开发新模式来临
- java--冒泡排序
- jQuery validate 验证隐藏域