【问题标题】:C# Tab switching in TabControlTabControl 中的 C# Tab 切换
【发布时间】:2015-11-13 20:42:27
【问题描述】:

我正面临这样的问题,我觉得很难克服。在 WinForms 中,我得到了一个带有 n 个 TabPages 的 TabControl。我想扩展 Ctrl+Tab / Ctrl+Shift+Tab 切换。所以我写了一些代码,只要焦点在 TabControl 或 Form 上就可以了。当应用程序焦点位于 TabPage 内部时(例如,位于 TabPage 内部的按钮上),按下 Ctrl+Tab 时,我的代码将被忽略,并且 TabControl 会自行跳到 TabPage(避免我的代码)。

有人知道吗?

【问题讨论】:

  • 您能否详细说明您是如何扩展切换的?
  • 我为 Form KeyUp/KeyDown 添加了事件处理程序
  • 设置为真。 e.Handled=true 和 e.SuppressKey=true 不会带来任何影响:/ 就像 contols 自己管理来自非托管部分的消息泵

标签: c# controls tabcontrol tabs


【解决方案1】:

您需要从 TabControl 派生并覆盖 ProcessCmdKey 虚拟方法,以便覆盖 Ctrl-Tab 行为。

例子:

public class ExtendedTabControl: TabControl
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.Tab))
        {
            // Write custom logic here
            return true;
        }
        if (keyData == (Keys.Control | Keys.Shift | Keys.Tab))
        {
            // Write custom logic here, for backward switching
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

【讨论】:

    【解决方案2】:

    TabControl 具有相当不寻常的处理来处理 Tab 键。它覆盖 ProcessKeyPreview() 方法以检测 Ctrl/Shift/Tab,然后在其 OnKeyDown() 方法中实现选项卡选择。它这样做是为了在它本身具有焦点以及任何子控件时都可以检测到击键。并避免其子控件之一踩到自定义 Tab 键处理。您可以通过覆盖 ProcessCmdKey() 使其工作,但随后您将破坏想要响应选项卡的子控件。

    最好的办法是重写它的 OnKeyDown() 方法。向您的项目添加一个新类并粘贴如下所示的代码。编译。将新选项卡控件从工具箱顶部拖放到表单上。

    using System;
    using System.Windows.Forms;
    
    class MyTabControl : TabControl {
      protected override void OnKeyDown(KeyEventArgs e) {
        if (e.KeyCode == Keys.Tab && (e.KeyData & Keys.Control) != Keys.None) {
          bool forward = (e.KeyData & Keys.Shift) == Keys.None;
          // Do your stuff
          //...
        }
        else base.OnKeyDown(e);
      }
    }
    

    请注意,您还应该考虑使用 Ctrl+PageUp 和 Ctrl+PageDown。

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 2011-11-22
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多