Hallo,
ich habe eine Form bei der ich die Tastenkombination STRG+E abfangen möchte, unabhängig davon welches Control gerade den Focus hat.
Über KeyPreview = true funktioniert das auch soweit ganz gut, mit Ausnahme der readonly RTB. Hier kommt der Tastendruck nicht im Form an. Wenn ich readonly der RTB rausnehme geht es wieder.
Ist das ein gewollter Effekt ?
Grüße
Das kann ich nicht reproduzieren. Wenn ich KeyPreview auf true hab und die Form das KeyDown Event abonniert hat, dann kommt das Event auch, wenn ich mit dem Focus in einer readonly RichTextBox bin.
Ich habe ein komplett leeres WinForms Programm erstellt eben. Auf dem Form befinden sich nur zwei RTBs. Eine ist readonly, die andere nicht.
Mein Code ist folgender:
namespace KeyDownTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.KeyPreview = true;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.E && e.Control)
{
MessageBox.Show("haha");
e.Handled = true;
}
}
}
}
Mehr nicht. Das Projekt ist völlig leer ansonsten.
Hat die readonly RTB den Focus (heißt der Cursor blinkt drinne) kommt keine MessageBox. Hat die andere RTB den Focus kommt sie.
Grüße
Probier mal KeyPress.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Hallo scrabbl,
registriere für die ReadOnly-TextBox für das PreviewKeyDown-Event folgendes:
private void TextBox2_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.E && e.Control)
{
e.IsInputKey = true;
}
}
herbivore
Danke für die Antworten, ich hatte es gestern noch so umgangen:
protected override bool ProcessCmdKey(ref Message msg, System.Windows.Forms.Keys keyData)
{
if (keyData == (System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))
{
MessageBox.Show("haha");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
Wobei mir deins besser gefällt.
Aber sehe ich das richtig dass das daran liegt das durch das readonly direkt alle Tastatureingaben untern Tisch fallen und deshalb nix im Form ankommt ?
Grüße
Hallo scrabbl,
es hat sicher damit zu tun, dass die Tastatureingaben bei einer ReadOnly-TextBox anders verarbeitet werden. Aber die genaue Ursache für den konkreten Unterschied bei Strg+E ist mir nicht bekannt. IsInputKey ist bei Strg+E für beide TextBoxen vorher false. Daher dürfte das Strg+E nach meinem Verständnis für beide TextBoxen eigentlich nicht im Form ankommen. Die Frage ist also eher, warum das Strg+E für die änderbare TextBox trotzdem beim Form ankommt. Darauf habe ich momentan keine Antwort. Es wäre sicher nicht verkehrt, den von mir vorgeschlagenen EventHandler für beide/alle TextBoxen zu registrieren, um sicher zu gehen, dass das Strg+E durch das KeyPreview auch wirklich unter allen Umständen ans Form weitergeleitet wird.
herbivore