Klickereignis wird für benutzerdefiniertes Benutzersteuerelement in einem Formular nicht ausgelöst

StackOverflow https://stackoverflow.com//questions/24049013

Frage

Ich habe eine Benutzersteuerung namens erstellt Toggle, das ist mein Code dafür

[DefaultEvent("Click")]
public partial class Toggle : UserControl {

    public bool ToggleStatus { get { return toggleStatus; } }
    private bool toggleStatus { get; set; }

    public Toggle() {
        InitializeComponent();
        toggleStatus = true;
    }

    private void toggleClick(object sender, EventArgs e) {
        if (toggleStatus) { // currently set as "true" or "on"
            this.lblSwitch.Dock = DockStyle.Right;                
            this.pnlBackground.BackColor = System.Drawing.Color.Red;
            toggleStatus = false;
        } else { // currently set as "false" or "off"
            this.lblSwitch.Dock = DockStyle.Left;                
            this.pnlBackground.BackColor = System.Drawing.Color.Green;
            toggleStatus = true;
        }
    }
}

Der toggleClick methode ist an das Klickereignis von Steuerelementen innerhalb der gebunden UserControl;das feuert gut ab.

Wenn ich jedoch meine Toggle steuern Sie ein Formular und versuchen Sie, ein Ereignis an den Klick zu binden.

    private void toggleSoundClick(object sender, EventArgs e) {
        soundToggle = !soundToggle;
    }

Ich habe sichergestellt, dass die richtige Methode an das Klickereignis in meinem Designer gebunden ist.cs-Datei meiner Benutzersteuerung und meines Formulars

Benutzersteuerung:

this.lblSwitch.Click += new System.EventHandler(this.toggleClick);
this.pnlBackground.Click += new System.EventHandler(this.toggleClick);

(Ich habe es an zwei Steuerelemente an meinem gebunden.) Toggle da ich möchte, dass es feuert, egal wo du auf das Steuerelement klickst)

Form:

this.tglSound.Click += new System.EventHandler(this.toggleSoundClick);

Das erwartete Verhalten für die Benutzersteuerung ist das Auslösen toggleClick (was es tut) dann sollte das Formular ausgelöst werden toggleSoundClick (was es nicht tut).Ich habe gesehen, dass dieses Verhalten für andere Benutzersteuerelemente, die ich in demselben Projekt entworfen und verwendet habe, einwandfrei funktioniert.

Klären:

Ich habe eine Benutzersteuerung namens ServerDisplay.Ich habe eine Methode, die an das Klickereignis des Hintergrundfensters von gebunden ist ServerDisplay (im Code für ServerDisplay), der eine zufällige Nachrichtenbox anzeigt:

    private void ServerDisplay_Click(object sender, EventArgs e) {
        MessageBox.Show("test");
    }

Dann habe ich eine ServerDisplay kontrolle in meinem Formular enthalten.Ich habe auch eine Methode, die an das Klickereignis gebunden ist (im Code für mein Formular)

    private void serverDisplayClick(object sender, EventArgs e) {
        if (loaded) {
            ServerDisplay display = (ServerDisplay)sender;
            this.lblLastServer.Text = "Last server joined was " + display.Server.Name + " at " + DateTime.Now.ToString("h:mm tt");
            centerControl(this.lblLastServer);
        }
    } 

Wenn ich auf das klicke ServerDisplay steuerelement in meinem Formular zeigt es die MessageBox (Code von innen) an ServerDisplay), aktualisiert dann die im Code angegebene Beschriftung (Code aus Formular).Dies ist das beabsichtigte Verhalten, aber es funktioniert nicht für meine anderen UserControl.

War es hilfreich?

Lösung

Ich habe es endlich herausgefunden!So wie ich das Steuerelement eingerichtet hatte, hatte ich das Steuerelement selbst, ein Bedienfeld, das den gesamten Hintergrund ausfüllte (ich habe es für die Farbe verwendet) und dann ein weiteres Bedienfeld im ersten Bedienfeld, das als "Schalter" fungierte.

Als ich das erste Bedienfeld entfernt und nur den Hintergrund des Steuerelements für die Farbe und ein kleines Bedienfeld für den Schalter verwendet habe, funktioniert es, wenn ich auf den Hintergrund klicke, aber nicht, wenn ich auf das Bedienfeld "Schalter" klicke.Ich denke, das wirft weitere Fragen auf, die ich getrennt von dieser stellen muss, aber zumindest habe ich meine Antwort bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top