zoukankan      html  css  js  c++  java
  • c#: TabControl隐藏选项卡(WizardPages)

    如Delphi之TPageControl控件,其TTabSheet有TabVisible属性,在制作类似Wizard页面切换时,甚为有用。

    而c#对应之TabControl控件,其页面TabPage无此属性,实现Tab标题栏隐藏,方法诸多,却不够易用,不甚方便。

    stackoverflow上找到另一方法,其移自微软社区,即扩展TabControl控件接管绘制消息,相比来说 ,易用多点。

    贴代码如下:

    using System;
    using System.Windows.Forms;
    
    public class TablessControl : TabControl
    {
        protected override void WndProc(ref Message m)
        {
            // Hide tabs by trapping the TCM_ADJUSTRECT message
            if (m.Msg == 0x1328 && !DesignMode)
                m.Result = (IntPtr)1;
            else
                base.WndProc(ref m);
        }
    
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == (Keys.Control | Keys.Tab) || keyData == (Keys.Control | Keys.Shift | Keys.Tab) || keyData == (Keys.Left) || keyData == (Keys.Right))
                return true;
    
            return base.ProcessCmdKey(ref msg, keyData);
        }
    }

    另一种实现方式,发布TabsVisible属性:

    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    
    public class WizardPages : TabControl {
        private bool tabsVisible;
    
        [DefaultValue(false)]
        public bool TabsVisible {
            get { return tabsVisible; }
            set {
                if (tabsVisible == value) return;
                tabsVisible = value;
                RecreateHandle();
            }
        }
    
        protected override void WndProc(ref Message m) {
            // Hide tabs by trapping the TCM_ADJUSTRECT message
            if (m.Msg == 0x1328) {
                if (!tabsVisible && !DesignMode) {
                    m.Result = (IntPtr)1;
                    return;
                }
            }
            base.WndProc(ref m);
        }
        
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == (Keys.Control | Keys.Tab) || keyData == (Keys.Control | Keys.Shift | Keys.Tab) || keyData == (Keys.Left) || keyData == (Keys.Right))
                return true;
    
            return base.ProcessCmdKey(ref msg, keyData);
        }
    }

    设计期间,与正常TabControl一样:

    运行期效果如下:

    参考资料:

    Tabs in Winform

    Hide Tab Header on C# TabControl

  • 相关阅读:
    不同浏览器对于js中for循环的判断
    png格式图片背景不透明问题解决
    qq登陆错误提示
    T职场人生系列之二十四:程序员如何增加收入
    if [ $# eq 0 ]该语句是什么含义?
    动态IP修改注册表降低PING值教程(XP系统)
    c# List列表数据转换成树形结构
    net core EF 链接mysql 数据库
    net core 部署到windows 服务
    IdentityServer4 密码模式认证
  • 原文地址:https://www.cnblogs.com/crwy/p/9548679.html
Copyright © 2011-2022 走看看