KeyDown auf PictureBox

08/10/2008 - 08:13 von andi rickenbach | Report spam
Hallo,

ich möchte ein KeyDown-Event auf einer PictureBox. Habe folgendes gemacht:

private void DesignerDlg_Load(object sender, EventArgs e)
{
Control ctl = (Control)pictureBox1;
KeyEventHandler handler = new KeyEventHandler (m_ImageWnd_PreviewKeyDown);
ctl.KeyDown += handler;
}

Bei jedem KeyDown bekomme ich das Event auf m_ImageWnd_PreviewKeyDown, nur
bei den vier Pfeiltasten nicht, auf welchen ich das eigentlich haben müsste.
Wenn ich auf eine Pfeiltaste drücke, springt der Fokus in die nahegelegene
Toolbar. Wie kann ich die Pfeiltasten abfangen?

Wenn ich das nun so mache (KeyUp-Event abfangen anstelle KeyDown):
private void DesignerDlg_Load(object sender, EventArgs e)
{
Control ctl = (Control)pictureBox1;
KeyEventHandler handler = new KeyEventHandler (m_ImageWnd_PreviewKeyDown);
ctl.KeyUp += handler;
}
sowie dies ist nötig
void m_ToolBar_GotFocus(object sender, EventArgs e)
{
this.pictureBox1.Focus();
}
So würde das gehen, dünkt mich aber sehr unschön.

Gibt es da ne saubere Lösung?

Vielen Dank.
 

Lesen sie die antworten

#1 Frank Dzaebel
08/10/2008 - 09:42 | Warnen spam
Hallo Andi,

PictureBox-Keydown mit Cursortasten



Zum Beispiel über:

[IMessageFilter-Schnittstelle (System.Windows.Forms)]
http://msdn2.microsoft.com/de-de/li...ilter.aspx

[Application.AddMessageFilter-Methode (System.Windows.Forms)]
http://msdn.microsoft.com/de-de/lib...ilter.aspx

[C# Frequently Asked Questions : Preprocess Win32 Messages through
Windows Forms]
http://blogs.msdn.com/csharpfaq/arc...45412.aspx

[SecurityPermission(SecurityAction.LinkDemand,
Flags = SecurityPermissionFlag.UnmanagedCode)]
public class TestMessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
Debug.WriteLine(m);

// hier spàter mit Konstanten arbeiten:
if (m.ToString().IndexOf("WM_KEYDOWN") != -1)
{
bool isMyPictureBox = (m.HWnd == ((Form1)Application.
OpenForms[0]).myFocusablePictureBox1.Handle);
if (isMyPictureBox) return true; //Message nicht weiterleiten
}
return false;
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen