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);
}
}
}