Laden...

Strg+S für UserControl

Erstellt von ayrtonsenna vor 18 Jahren Letzter Beitrag vor 16 Jahren 3.953 Views
ayrtonsenna Themenstarter:in
27 Beiträge seit 2006
vor 18 Jahren
Strg+S für UserControl

Hallo Forum,

ich möchte in einem Usercontrol auf die Tastenkombination Strg+S (speichern) reagieren.
Ich habe ein UserControl welches Daten eines eigenes Objekts darstellt. Der Nutzer kann in diesem Control die Daten des Objekts bearbeiten und dann über einen Button speichern.
Eine variable Anzahl solcher Contols werden in ein FloatLayout-Panel geschoben.

Nun möchte ich realisieren, dass beim Drücken von Strg+S ebenfalls gespeichert wird.
Dafür habe ich folgendes für eine TextBox auf dem Usercontrol geschrieben:


private void txtName_KeyDown(object sender, KeyEventArgs e)
{
       if(((Control.ModifierKeys & Keys.Control)==Keys.Control) && (e.KeyCode==Keys.S))
       {  
                 // speichern 
       }
}

Das funktioniert auch super. Nur wenn ich das Event fürs ganze Control definiere, kommt kein Event an.
Muss ich dieses Event für jedes Steuerelement auf dem Usercontrol definieren?
Das ist ja mehr als umständlich.
Gibt es noch ne andere Möglichkeit, wie ich Strg+S realisieren kann.
Bei google habe ich nichts Brauchbares gefunden, obwohl es doch nichts Ungewöhnliches ist.

Danke für eure Tipps

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo ayrtonsenna,

Muss ich dieses Event für jedes Steuerelement auf dem Usercontrol definieren?

KeyEvents gehen immer an das Control, das den Focus hat.

Das ist ja mehr als umständlich.

Hä? Das geht doch in einer Zeile (je nach zählweise sind es auch drei). Eine Zeile für alle Controls natürlich.

Gibt es noch ne andere Möglichkeit, wie ich Strg+S realisieren kann.

Wenn dein UserControl ein Form wäre, könntest du Form.KeyPreView benutzen.

herbivore

ayrtonsenna Themenstarter:in
27 Beiträge seit 2006
vor 18 Jahren

Aber den EventHandler muss ich ja für jedes Element definieren, oder?
Dass das dann nur ein paar Zeilen sind, ist mir schon klar... 🙂

Aber Danke für den Tip mit dem KeyPreview. Werde damit ein wenig rumprobieren.

MfG

K
111 Beiträge seit 2006
vor 18 Jahren

Hi.
Das erste mal das ich ne Frage beantworten kann...hoffe ich jedenfalls ^^
Du kannst doch deinen Controls einfach immer das selbe Event zuweisen indem du das so machst.
Ich habs jetzt einfach mal für n paar Textboxen gemacht.


this.textBox1.KeyDown += new System.EventHandler(this.MeinKeyEvent);
this.textBox2.KeyDown += new System.EventHandler(this.MeinKeyEvent);
//...
//...
private void MeinKeyEvent(object sender, System.Windows.Forms.KeyEventArgs e)
		{
		//Ich mach dann mal was
		}

Wenn du da natürlich mehr Elemente hast kannste das ja auch mit ner Schleife machen

Hoffe ich habe deine Frage richtig verstanden und beantworten.

mfg Kami

ayrtonsenna Themenstarter:in
27 Beiträge seit 2006
vor 18 Jahren

Hallo,

genau das ist die Frage gewesen: muss ich für jedes Control einen EventHandler haben?
Dass der Handler dann immer auf das selbe zeigt, ist mir schon klar. 🙂

Danke....

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

ich habe ja schon geschrieben, dass man nur eine zeile braucht, um eine EventHandler für alle Controls zu registrieren. Hier kommt sie (zu verwenden innerhalb des UserControls):


foreach (Control ctrl in Controls) { ctrl.KeyDown += new KeyEventHandler (MeinKeyEvent); }

herbivore

A
764 Beiträge seit 2007
vor 16 Jahren

Hier mal meine verschachtelte Lösung:


public DataDialog()
{
    InitializeComponent();

    SetKeyEvent(this);
}

private void SetKeyEvent(Control control)
{
    foreach (Control ctrl in control.Controls)
    {
        ctrl.KeyDown += new KeyEventHandler(ctrl_KeyDown);
        SetKeyEvent(ctrl);
    }
}

void ctrl_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyValue)
    {
        case 33:
            {
                awTabControl.SelectedIndex--;
                break;
            }
        case 34:
            {
                awTabControl.SelectedIndex++;
                break;
            }
    }
}

Für Controls in Controls in Controls in Controls in Controls...

Alf