WinForms TabControl隐藏选项卡并禁用所有键盘快捷键

时间:2012-08-28 13:53:08

标签: c# winforms tabcontrol

我正在尝试扩展TabControl以隐藏所有标签。 根据Hans Passant的回答(https://stackoverflow.com/a/2207774/965722),我创建了如下代码:

using System;
using System.Windows.Forms;

class ViewStack : 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);
    }
}

这样,标签在设计模式下可见,并隐藏在可执行文件中。 我需要做的是禁用此控件的所有可能的内置键盘快捷键,以便只能通过代码更改选项卡。

目前我已使用Ctrl + Tab,Ctrl + Shift + Tab并使用向左/向右箭头阻止导航。

我应该阻止哪些其他快捷方式,以便最终用户无法自己更改标签(使用TabControl中构建的任何组合键)?

1 个答案:

答案 0 :(得分:0)

您可以使用:

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 || keyData == Keys.Home || keyData == Keys.End) {
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

这可以解决您的问题。