Frage von nb135, 28

c# panel immer im vordergrund?

Hallo, Ich programmiere grade eine forms anwendung in c#. Ich habe jetzt ein panel, darauf mehrere textfelder. Wenn ich auf das panel clicke wird eine click methode ausgeführt, aber wenn ich auf die textfelder clicke nicht. Wie kann ich es machen, dass die methoder auch bei den textfäldern ausgeführt wird, ohne das bei jedem einstellen zu müssen? (Die textfälder liegen auf dem panel)

Danke schonmal für eure hilfe ;)

Antwort
von CrystalixXx, 10

Was willst du denn damit erreichen? Sicherlich gibt es dafür auch andere Möglichkeiten.

Ansonsten hättest du die Wahl:

  1. Du verwendest die Windows API. Damit würdest du aber deinen Code gewaltig aufblähen. Sehr viel Arbeit für vergleichsweise wenig Nutzen.
  2. Du erzeugst dir ein eigenes Panel, welches das Click-Ereignis der Steuerelemente abboniert und selbst das Click-Ereignis auslöst. (Beispiel dazu siehe unten.)
  3. Du kapselst den Code, der beim Klick auf das Panel erfolgen soll, in eine eigene Methode und rufst sie auf, wenn auch auf die anderen Steuerelemente geklickt wurde, in dem du deren Click-Ereignis behandelst.

Beispiel für Nummer 2:

public class MyPanel : Panel
{
private void Control_Click(object sender, System.EventArgs e)
{
OnClick(e);
}

protected override void OnControlAdded(System.Windows.Forms.ControlEventArgs e)
{
base.OnControlAdded(e);
e.Control.Click += Control_Click;
}

protected override void OnControlRemoved(System.Windows.Forms.ControlEventArgs e)
{
e.Control.Click -= Control_Click;
base.OnControlRemoved(e);
}
}

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten