Laden...

Keydown für Usercontrol!

Erstellt von Da_Flo vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.765 Views
D
Da_Flo Themenstarter:in
269 Beiträge seit 2009
vor 13 Jahren
Keydown für Usercontrol!

Hallo!

Ich weis, das wurde schon öfters im Forum besprochen. Meine Aufgabenstellung ist allerdings leicht abgeändert!

Ich will nicht im übergeordneten die KeyDowns von irgendwelchen Controls mitbekommen. Sondern ich hab ein Usercontrol wo wiederum ein usercontrol drauf ist und ich will in diesem usercontrol das KeyDown event bekommen und darauf reagieren. weil dan ein Dialog geöffnet wird, aber ich will das ganze nicht von aussen auslösen sondern im Usercontrol selbst!

danke
Flo

Gelöschter Account
vor 13 Jahren

für untergeordnete controls kannst du einfach das entsprechende event registrieren.

D
Da_Flo Themenstarter:in
269 Beiträge seit 2009
vor 13 Jahren

Ja aber das Problem ist, dan muss ein Fokus auf das untergeordnete control liegen damit er die events bekommt?!

R
69 Beiträge seit 2009
vor 13 Jahren

Hi,

hilft Dir das ?


 protected override bool ProcessDialogKey(Keys keyData)
        {
            try
            {
                if (keyData == Keys.Enter)
                {
                    DoSomething
                    return true;
                }
                else
                {
                    return base.ProcessDialogKey(keyData);
                }

            }
            catch (Exception exception)
            {
                                return false;
            }
        }

im UserControl...

mfg

Ron

Gelöschter Account
vor 13 Jahren

keydown events bekommt nur der, der gemeint ist. es ist immer nur der gemeint, der den fokus hat.

wenn du form-weit die keyevents haben willst, musst du das in der form selbst machen und eine entsprechende schnittstelle bereitstellen, woran du dann dein usercontrol binden kannst oder du registrierst dich in der form und rufst im eventhandler eine methode deines usercontrols auf.

wenn du global was haben willst, musst du mit hooks arbeiten.

2.298 Beiträge seit 2010
vor 13 Jahren

Das Untergeordnete Control fängt sowieso standardmäßig nur seine eigenen Events und die von untergeordneten Controls (Sofern sie aboniert sind).

Wie ich dich verstanden habe möchtest du aber von übergeordneten Controls Events fangen.

Das einzige was du tun kannst, ist im untergeordneten Control eine Methode implementieren, die du vom übergeordneten ausführst beim Key Down. - Bei den Untergeordneten Controls brauchst du das KeyDown nur auf die Handlermethode des Controls legen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

D
Da_Flo Themenstarter:in
269 Beiträge seit 2009
vor 13 Jahren

Danke!

Ich hab es jetzt so gelöst das ich im Übergeordneten UserControl die Controls durchlaufe und meine Methode in den untergeordneten UserControls aufrufe!

916 Beiträge seit 2008
vor 13 Jahren

Das find ich für meine Teil nicht optimal, weil dann deine übergeordnete Form das UserControl kennen muss. Definiere doch einfach ein eigenes Event, welches die übergeordnete Form feuert wenn KeyPreview gefeuert wird. Dein UserControl muss sich dann nur noch auf dieses Event anmelden, und das komplette KnowHow um den Dialog zu öffnen etc. liegt dann im eigentlichen UserControl.

Again what learned...

D
Da_Flo Themenstarter:in
269 Beiträge seit 2009
vor 13 Jahren

Mein programm ist so aufgebaut dass lauter UserControls übereinander liegen, das Aktuelle ist halt im Vordergrund. Wenn ich jetzt auf mehreren Screens mit F5 was auslösen möchte, würde das ja im fall eines Events jeder Screen der auf F5 reagieren soll etwas tun.
Ich hab mir im Form einfach einen zeiger auf das Aktuelle Usercontrol gespeichert und rufe da eine methode auf!

916 Beiträge seit 2008
vor 13 Jahren

Wenn ich jetzt auf mehreren Screens mit F5 was auslösen möchte, würde das ja im fall eines Events jeder Screen der auf F5 reagieren soll etwas tun.

Das stimmt nicht. Nur diejenigen UserControls die sich auf das Event anmelden, bekommen auch das Event. Der Vorteil daran ist aber, das deine Form nicht direkt die Methode aufruft, sondern das UserControl die Aktion triggert weil es sich "selber" anmeldet.

Again what learned...

D
Da_Flo Themenstarter:in
269 Beiträge seit 2009
vor 13 Jahren

ja is schon klar das sich der screen "selber" anmeldet, aber was ist wenn ich 2 Screens habe. Die jeweils bei ENFT den aktuell makierten Datensatz in der DatagridView löschen. Dan bekommt auch der Screen, der nicht im Vordergrund ist das Event und löscht ein Element, oder seh ich das falsch?

916 Beiträge seit 2008
vor 13 Jahren

Ja das ist richtig, es bekommt natürlich jeder der sich auf das Event anmeldet den call. Aber so wie du es machst, muss die Form auch unterscheiden an wem sie die Methode aufruft. Daher kannst du das einfach dem UserControl überlassen, und wenn es das Event bekommt, muss es nur noch checken ob es den Fokus hat.

Der Vorteil daran, wie ich bereits erwähnte ist, dass die Form kein KnowHow braucht, sondern die Logik in dem UserControl liegt, bzw. der BL die dem UserControl zugeordnet ist.

Again what learned...