首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#如何触发选项卡控件特定选项卡中的按键事件?

C#如何触发选项卡控件特定选项卡中的按键事件?
EN

Stack Overflow用户
提问于 2010-01-25 04:38:23
回答 6查看 8.5K关注 0票数 1

我的表单中有一个tabControl1,其中有三个名为TabPage1、TabPage2和TabPage3的TabPages。

当TabPage 2具有焦点时,我需要引发一个按键事件(用于导航的箭头键)。此事件不应在其他TabPages中引发。

有人知道怎么做吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-25 05:50:07

代码语言:javascript
复制
protected override bool ProcessCmdKey(ref Message m, Keys keyData)  
        {  
            bool blnProcess = false;  
            if (keyData == Keys.Left)  
            {  
                blnProcess = true;  
                MessageBox.Show("Key left");  
                if (myTabControl1.SelectedIndex == 1)  
                    MessageBox.Show("inside");  


             }
       }

这段代码似乎可以工作,所以当我选择tabPage2时,当我按下向左箭头键时,一个消息框会告诉我“在里面”。

Probalby不是做正确的事情,但至少现在它是有效的。

票数 1
EN

Stack Overflow用户

发布于 2010-01-25 04:48:16

在选定的事件处理程序上,您可以将发送方强制转换为适当的控件,并检查其名称。如果该事件是从TabPage2生成的,则可以触发key事件。

像这样的东西

代码语言:javascript
复制
private void TabPage_Selected(object sender, EventArgs e)
{
  TabPage source = sender as TabPage;
  if(source.Name.equals("TabPage2"))
    //Do whatever...
}
票数 4
EN

Stack Overflow用户

发布于 2010-01-25 05:03:48

您需要从TabControl派生自己的控件,以便能够拦截箭头键并生成事件。向您的项目添加一个新类,并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。

代码语言:javascript
复制
using System;
using System.Windows.Forms;

class MyTabControl : TabControl {
  public event EventHandler<KeyEventArgs> ArrowKeys;

  protected void OnArrowKeys(KeyEventArgs e) {
    EventHandler<KeyEventArgs> handler = ArrowKeys;
    if (handler != null) handler(this, e);
  }
  protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Left || keyData == Keys.Right) {
      var e = new KeyEventArgs(keyData);
      OnArrowKeys(e);
      if (e.Handled) return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
  }
}

表单中的示例用法:

代码语言:javascript
复制
private void myTabControl1_ArrowKeys(object sender, KeyEventArgs e) {
  if (myTabControl1.SelectedIndex == 1) {
    // Do something with e.KeyData
    //...
    e.Handled = true;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2128711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档