因为项目原因,需要实现类似于安装程序里面的上一步下一步,而且还要跳步,最开始实现方式是把每个步奏设置为一个独立的窗体,然后show,close,代码可想而知,后来灵光一闪想到用tabControl,正准备大干一场时,发现这货居然表头不能隐藏,用了一些别扭的方法后勉强隐藏了,又发现这货背景色不能设置为透明。。。好在天无绝人之路,前几天搜到了大名鼎鼎的CSKIN(请原谅我的无知。。。),用了插件带的tabcontrol,发现可以背景色透明,再加上这几天搜索的结果,于是想能不能扩展一下,达到需求,废话少说,直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;namespace WindowsFormsApplication1
{/// <summary>/// 文件名:TabControlUltimate/// 描述:基于SkinTabControl的选项卡,隐藏头部,支持子选项卡load事件/// 作者:Bright/// 日期:2017/4/27 22:48:33/// 修改记录:///         R1:///             作者   ///             日期     ///             原因///         R2:///             作者   ///             日期     ///             原因/// </summary>public class TabControlUltimate : CCWin.SkinControl.SkinTabControl{protected override void OnCreateControl(){if( !this.DesignMode && TabCount > 0 ){System.Windows.Forms.Panel p = new System.Windows.Forms.Panel();p.SuspendLayout();this.SuspendLayout();p.Parent = this.Parent;p.BackColor = System.Drawing.Color.Transparent;p.Size = new System.Drawing.Size( this.Size.Width, this.TabPages[0].Size.Height );p.Location = new System.Drawing.Point( this.Location.X, this.Location.Y + this.Size.Height - this.TabPages[0].Size.Height );this.Parent = p;this.Location = new System.Drawing.Point( 0, this.TabPages[0].Size.Height - this.Size.Height );this.ResumeLayout( false );p.ResumeLayout( false );}base.OnCreateControl();}protected override void OnPaint( System.Windows.Forms.PaintEventArgs e ){if( this.DesignMode ){}base.OnPaint( e );}protected override void OnKeyDown( KeyEventArgs e ){// 屏蔽control+tabif(e.Modifiers == Keys.Control&& e.KeyCode == Keys.Tab ){e.Handled = true;return; //trap CTRL+TAB }else if( e.Modifiers == (Keys.Control | Keys.Shift) && e.KeyCode == Keys.Tab ){e.Handled = true;return; //trap  CTRL+SHIFT+TAB}else{base.OnKeyDown( e );}}/// <summary>/// 显示索引值的选项卡/// </summary>/// <param name="i"></param>/// <returns>null成功,非null表示失败原因</returns>public virtual string ShowIndex( int i ){if( i < 0 || i>= TabPages.Count ){return "out of index";}SelectedIndex = i;return null;}/// <summary>/// 显示索引值的选项卡/// </summary>/// <param name="tab_name">子选项卡Name</param>/// <returns>null成功,非null表示失败原因</returns>public virtual string ShowIndex(string tab_name){if( TabPages.ContainsKey(tab_name) ){this.SelectTab( tab_name );return null;}else{return "out of index";}}/// <summary>/// 显示下一个选项卡/// </summary>public virtual void ShowNext(){ShowIndex( SelectedIndex + 1 );}/// <summary>/// 显示上一个选项卡/// </summary>public virtual void ShowPre(){ShowIndex( SelectedIndex - 1 );}/// <summary>/// 初始化选项卡控件/// </summary>public virtual void InitTab(){SelectedIndex = 0;}// 用于记录选项卡有没有选中过private Hashtable selected_time = new Hashtable();protected override void OnSelectedIndexChanged( EventArgs e ){base.OnSelectedIndexChanged( e );if( !selected_time.ContainsKey( SelectedTab.Name ) ){EventHandler eh = (EventHandler)event_list[SelectedTab.Name];if( eh!= null ){eh( event_list[SelectedTab.Name], e );}}selected_time[SelectedTab.Name] = 1;}private Hashtable event_list = new Hashtable();/// <summary>/// 为子选项卡添加第一次选中的事件,需要在初始化前使用/// </summary>/// <param name="tab_name">子选项卡Name</param>/// <param name="e">事件参数</param>public void TabPageLoadBind(string tab_name, EventHandler e){event_list[tab_name] = e;}}
}

调用示例

 private void Form1_Load( object sender, EventArgs e ){mytab1.TabPageLoadBind( "skinTabPage3", ( obj, ee ) =>{MessageBox.Show( "skinTabPage3" );} );mytab1.TabPageLoadBind( "skinTabPage4", ( obj, ee ) =>{MessageBox.Show( "skinTabPage4" );} );// 初始化之前进行事件绑定mytab1.InitTab();}

这个控件可以为子选项卡添加类似于load的事件,而且还屏蔽了用快捷键方式切换tab,虽然叫ultimate,但还不是最终版,最终版应该是改造tabpage,把事件加在tabpage上,然后还要为新的tabcontrol分配设计器任务,不过这个超出了本人的能力,现在这个已经满足要求了,有知道最终版做法的请说明一下,谢谢

winform隐藏tablcontrol的标签相关推荐

  1. 密码的显示与隐藏php,el-input 标签中密码的显示和隐藏功能的实例代码

    效果展示: 密码隐藏: 密码显示: 代码展示: 一:标签代码 二: var app = new Vue({ el:"#app", data:{ users:[], total:10 ...

  2. html 内容未选择时隐藏_html入门 标签入门

    1. html是由 李爵士 发明的 2. html由 <!DOCTYPE空格html> 起手 表示 文档类型 3. 常用的章节标签 * 标题 * 章节 section * 段落 p * 头 ...

  3. JS隐藏/显示div标签

    代码如图: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF- ...

  4. winform中当laber标签字段过长时

    将 AutoEllipsis 设置为 true 可在用户将鼠标移到控件上时显示超出 Label 宽度的文本.   如果 AutoSize 为 true,则标签将放大以适应文本,并且不会出现省略号.

  5. 隐藏的html标签页,隐藏网页代码的一种方法

    思路: 在html.asp中用方式来显示内容 在html.asp代码中,设置一个session,在js.asp进行判断,如果是设置的值就显示正常内容,如果不是,就隐藏或显示其它内容,在js.asp的结 ...

  6. WinForm隐藏窗口控制最大化最小化按钮

    设置对窗口大小不能调整 找到[FormBorderStyle]选项,在选项列表中选择[FixedDialog],这样就可以固定窗口大小,禁止对窗口的自由调整了. 隐藏窗口的最大化和最小化按钮: 在选项 ...

  7. 通过原生 js 隐藏和显示标签元素

    利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: document.getElementB ...

  8. html table 边框线隐藏,HTML table 标签边框问题(隐藏表格边框、单元格边框等)...

    一.表格的常用属性 基本属性有:width(宽度).height(高度).border(边框值).cellspacing(表格的内宽,即表格与tr之间的间隔). cellpadding(表格内元素的间 ...

  9. css超出隐藏、悬浮标签文字提示

    1.<a href="#" title="表现示意形式">模式</a> 2.<img src="#" titl ...

最新文章

  1. 不讲武德的微信,又来一波新功能!
  2. [life]见证本届世界杯意大利的出局
  3. c语言不可见字符的ascii,转CHAR不可见字符
  4. Django(part46)--form表单验证
  5. Ajax — 大事件项目(第一天)
  6. JS高级——模块化学习笔记
  7. 21 SD配置-主数据-客户账户组分配编号范围
  8. 单调队列以及单调队列优化DP
  9. WordPress精美免费主题分享系列之新闻风格篇
  10. JPA多表查询映射自定义实体类(包含两个表字段)
  11. HDU2026 首字母变大写【文本处理】
  12. 安装tensorflow时候报错ImportError: DLL load failed: 找不到指定的模块。Failed to load the native TensorFlow runtime.
  13. 【LaTeX】pdfTex error: pdflatex.exe (file simhei.ttf): cannot open TrueType font file for reading解决方案
  14. Task一个轻量级分布式任务计算系统
  15. 面试时,如何回答你还有什么想要了解的?
  16. java csv 引号_csv文本编辑引号问题
  17. nssl 1454 2018CodeM总决赛 最短路
  18. window.open 新开窗口设置title问题
  19. FastAdmin点击输入框, 弹出选择页面, 并把所选的值返回给父窗口
  20. 安邦信AMB100系列通用变频器通过PID功能实现恒压供水的基本方法

热门文章

  1. 二维数组排序算法php,phpsort_php二维数组排序方法
  2. 软件架构--服务架构演进
  3. Python 遍历数组的方法
  4. 推荐一个shell语法在线检查网站,也可以学习shell语法
  5. java escape工具类_java开发常用工具类
  6. hadoop生态圈各个组件简介
  7. 请选择正确html,以下HTML标签中有两个是成对标签( )。[请选择2个正确答案]
  8. SAP 采购订单入库——交货已完成
  9. 本地 服务器 共享文件,本地和云服务器文件共享
  10. 一款与众不同的壁纸应用——《MW地图壁纸》