KeyEvents aus UserControls  
Frank Dzaebel, erstellt am: 16.09.06, zuletzt geändert:  16.09.06
Kategorie: UserControls, .NET-Version: 2.0, [Download]

Hier wird ein Beispiel gezeigt, wie Tastatur-Events von mehreren UserControl's über die Form global behandelt werden können. Sowohl der Click mit der Maus, als auch der Tastendruck [Keys.Up, Down, Left, Right] führen zum gleichen Code-Handling. Bei MenuItem's ginge dies einfacher über die Shortcut-Eigenschaft.



using System;
using System.Windows.Forms;

namespace TabContrl4
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void arrows_CursorButtonClicked(object sender,KeyEventArgs e)
    {
      TabPage tp = (TabPage)((Control)sender).Parent.Parent;
      MessageBox.Show("Button [" + e.KeyData.ToString("G") +
        "] auf Tabpage '" + tp.Name + "' geklickt");
      ((TabControl)tp.Parent).SelectedTab = tp;
    }

    private void Form1_KeyDown(object sender,KeyEventArgs e)
    {
      foreach (Control ctl in tabControl1.SelectedTab.Controls)
        if (ctl is Arrows) //UserControl
        {
          Arrows arr = (Arrows)ctl; string n = arr.Name;
          switch (e.KeyCode)
          {
            case Keys.Down:  case Keys.Up: case Keys.Right: case Keys.Left:
              arr.PerformClick(e.KeyCode); e.Handled = true;
              break;
            default: break;
          }
        }
    }
  }
}

using System;
using System.Windows.Forms;

namespace TabContrl4
{
  public partial class Arrows : UserControl
  {
    public Arrows()
    {
      InitializeComponent();
    }

    public event KeyEventHandler CursorButtonClicked;

    public void PerformClick(Keys keys)
    {
      switch (keys)
      {
        case Keys.Down: btnDown.PerformClick(); break;
        case Keys.Left: btnLeft.PerformClick(); break;
        case Keys.Right: btnRight.PerformClick(); break;
        case Keys.Up: btnUp.PerformClick(); break;
        default: break;
      }
    }
    
    private void RaiseClicked(object sender, Keys keys)
    {
      if (CursorButtonClicked != null)
        CursorButtonClicked(sender, new KeyEventArgs(keys));
    }

    private void btnUp_Click(object sender,EventArgs e)
    {
      RaiseClicked(sender, Keys.Up);
    }

    private void btnDown_Click(object sender,EventArgs e)
    {
      RaiseClicked(sender, Keys.Down);
    }

    private void btnLeft_Click(object sender,EventArgs e)
    {
      RaiseClicked(sender, Keys.Left);
    }

    private void btnRight_Click(object sender,EventArgs e)
    {
      RaiseClicked(sender, Keys.Right);
    }
  }
}