Domanda

Ho creato un usercontrol chiamato Toggle, questo è il mio codice per IT

[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;
        }
    }
}
.

Il metodo toggleClick è legato all'avanguardia dei controlli all'interno del UserControl; Questo spara bene.

Tuttavia, quando metto il mio controllo Toggle su un modulo e tenta di legare un evento al clic di esso, non si spara.

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

Ho fatto in modo che il metodo corretto sia legato all'evento Click nel mio file Designer.cs di entrambi i miei usercontrol e il mio modulo

UserControl:

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

(Ho legato a due controlli sul mio Toggle poiché voglio sparare, non importa dove fai clic sul controllo)

Modulo:

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

Il comportamento previsto per l'usercontrol è quello di sparare a toggleClick (che lo fa), quindi il modulo dovrebbe sparare a toggleSoundClick (che non lo fa). Ho visto che questo comportamento funziona bene per altri usercontrols che ho progettato e utilizzato in questo stesso progetto.

per chiarire:

Ho un usercontrol chiamato ServerDisplay. Ho un metodo legato all'evento Click del pannello di sfondo di ServerDisplay (nel codice per ServerDisplay) che mostra un messaggio casuale:

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

Quindi, ho un controllo ServerDisplay contenuto nel mio modulo. Ho un metodo legato anche all'evento click di esso (nel codice per il mio modulo)

    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);
        }
    } 
.

Quando faccio clic sul controllo ServerDisplay nel mio modulo, mostra il messaggio MessageBox (codice da ServerDisplay), quindi aggiorna l'etichetta che ho specificato nel codice (codice dal modulo). Questo è il comportamento previsto, ma non funziona per il mio altro UserControl.

È stato utile?

Soluzione

Alla fine l'ho capito!Il modo in cui avevo il set di controllo, ho avuto il controllo stesso, un pannello riempiendo l'intero background (l'ho usato per il colore), e poi un altro pannello all'interno del primo pannello per fungere da "interruttore". Quando mi sono liberato del primo pannello e ha appena usato lo sfondo del controllo per il colore e un piccolo pannello per l'interruttore, funziona quando faccio clic sullo sfondo, ma non quando faccio clic sul pannello "Interruttore".Immagino che questo apre più domande che dovrò chiedere separatamente da questo, ma almeno ho ricevuto la mia risposta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top