KeyDown KeyUp events im user control [Winforms]



  • Ich hab folgendes Problem: Ich hab ein Panel, in diesem liegt ein weiteres Panel. Auf dem liegt ein Control dessen Aufbau ich nicht kenne:

    [OuterPanel[InnerPanel[UserControl]]]
    

    am OuterPanel und InnerPanel bin ich an KeyDown und KeyUp angemeldet. Das ganze hat bisher ganz gut geklappt, jetzt hab ich aber auf den UserControl einen Button. Dieser kriegt direkt nach dem Anfügen den Focus wodurch ich keine KeyDown/-Up events mehr bekomme.
    Welche Möglichkeiten hätte ich das zu beheben. Idealerweise würde UserControl den Focus verlieren sobald die Mouse sich nicht mehr darüber befindet. Bzw.: sobale InnerPanel oder OuterPanel die Mouse bekommt darf UserControl nichtmehr den Focus haben.
    Ich hab das ganze schon probiert indem ich meinen InnerPanel selektierbar mache und beim MouseEnter ein Select() und Focus() darauf aufrufe. Sobald aber im UserControl ein Button (wahrscheinlich auch jedes andere Control) selektiert ist, funktioniert der Trick nicht mehr. Da kann ich Select aufrufen wie ich möchte, es wird nicht mehr das reine InnerPanel selektiert. Kennt sonst noch jemand Tricks wie ich das verhalten entsprechend hinkriege?
    Ich hab mir auch schon ProcessCmdKey angeschaut, da krieg ich aber nur KeyDown Events ich brauch aber für bestimmte Tasten auch das KeyUp Event.
    Was noch zu beachten ist: UserControl hab ich nicht in der Hand. Dort kann ich keine Controls ändern oder dergleichen. Das krieg ich nur in die Hand und muss es so wie es ist, auf mein InnerPanel hinzufügen. Das ganze Handling muss also außen herum geschehen.



  • Setze im Designer der Form KeyPrewie = true (voreingestellt = false) und füge die Events KeyDown / KeyUp hinzu. In den Events musst du dann entscheiden, was mit welcher Taste geschehen soll.



  • Das hab ich vergessen zu Erwähnen, ich hab selbst keine Form. Das ganze ist selbst "nur" ein UserControl. Welches auf die Eingaben reagieren soll. Die Form auf der das Control mal kommt kenne ich auch nicht. Da weiss ich nicht ob ich da was ändern darf.



  • Ich habs nun lösen können. War irgendwie einfacher als Gedacht. Das OuterPanel hab ich Selectable gemacht, im OnEnter setz ich nun einfach das ActiveControl auf null. Dadurch ist immer InnerPanel nix mehr Aktiv. Und ich krieg meine Events vom OuterPanel. Klickt aber jemand in die Controls im InnerPanel hält das ganze solange den Fokus bis man das Innere Panel wieder verlässt.


Anmelden zum Antworten