【问题标题】:C# WinForms TabStrip control: no acceleratorC# WinForms TabStrip 控件:无加速器
【发布时间】:2021-05-28 05:01:15
【问题描述】:

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

关于 TabStrip 和 TabPage 的帮助不包括这个主题。属性ShowKeyboardCues 是只读的。谷歌很无奈。

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

【问题讨论】:

  • 短版?你不能
  • 谢谢 - 很遗憾
  • (长版;你必须自己画,见下文)

标签: c# winforms accelerator tabstrip


【解决方案1】:

How can I set up keyboard shortcuts for a Windows Forms 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);
    }

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

【讨论】:

  • 非常感谢您的提示。我是 C# 新手,但我在 6 年前在 VB 中绘制了自己的标签条。我会试一试。抱歉没有找到文章(加速器、热键、快捷方式...)。
【解决方案2】:

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

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

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

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

【讨论】:

  • 运气不好!非常感谢您的详细解答。
猜你喜欢
  • 2021-07-06
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多