Laden...

KeyPreview bei readonly RichTextBox

Erstellt von scrabbl vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.376 Views
S
scrabbl Themenstarter:in
211 Beiträge seit 2010
vor 10 Jahren
KeyPreview bei readonly RichTextBox

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

T
415 Beiträge seit 2007
vor 10 Jahren

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.

S
scrabbl Themenstarter:in
211 Beiträge seit 2010
vor 10 Jahren

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

3.825 Beiträge seit 2006
vor 10 Jahren

Probier mal KeyPress.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

49.485 Beiträge seit 2005
vor 10 Jahren

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

S
scrabbl Themenstarter:in
211 Beiträge seit 2010
vor 10 Jahren

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

49.485 Beiträge seit 2005
vor 10 Jahren

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