0

我在 WinForms 表单上使用选项卡条控件。我尽可能地使用键盘加速器。当我将 TabPage 的 Text 属性设置为 eg&Documents时,选项卡上的文本是字面上的,而不是带下划线&Documents的字母D。

关于 TabStrip 和 TabPage 的帮助不涉及该主题。该属性ShowKeyboardCues是只读的。谷歌很无奈。

谁能给我一个提示如何显示加速器?

4

2 回答 2

1

如何为 Windows 窗体 TabControl 设置键盘快捷键?提供有关为其设置键盘快捷键的提示。尽管在显示加速器方面,您必须自己绘制它们

将 tabControl 的 DrawMode 设置为 OwnerDrawFixed 然后做一些代码来绘制标签,例如(我不得不努力让它变得如此丑陋)

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
    {
        //Change appearance of tabcontrol
        Brush backBrush = Brushes.Red;
        Brush foreBrush = Brushes.Blue;
        e.Graphics.FillRectangle(backBrush, e.Bounds);

        Rectangle r = e.Bounds;
        r = new Rectangle(r.X, r.Y + 3, r.Width, r.Height - 3);
        e.Graphics.DrawString("my label", e.Font, foreBrush, r);
        var sz = e.Graphics.MeasureString("my ", e.Font);
        e.Graphics.DrawString("_", Font, foreBrush, r.X + sz.Width - 2, r.Y + 2);
    }

在此处输入图像描述

开个玩笑,设置一些难看的颜色确实可以帮助您查看绘图区域的边界等。我相信您会搞砸的..

于 2021-05-27T20:54:44.207 回答
1

这些控件都不支持该功能。可以模拟它,但这是一项漫长而复杂的任务,我不建议这样做,因为它是非标准功能。因此,任何人都不太可能期望它发生。另一方面,使用 Ctrl+Tab 更改选项卡是标准行为,因此已被自动支持。

如果您确实想这样做,则需要:

  • 子类化控件
  • 覆盖绘画并自己在选项卡上绘制文本
  • 预览 keydown 事件并使用它来确定您想要的组合键是否被按下
  • 根据您截获的按键以编程方式选择正确的选项卡

正如我所说,我不建议这样做,因为这不是该控件的正常行为,并且因为复杂性意味着它可能是错误的。但可能...

于 2021-05-27T20:27:12.453 回答