Utente Pulsanti di Controllo per Chiudere una finestra di Dialogo

Ho creato un Controllo Utente nella mia applicazione che dispone di una casella di testo e quindi 2 pulsanti su di esso. Un pulsante per Aggiungere i dati al DB da textbox e il secondo Annulla l’azione. Questo Controllo Utente viene quindi aggiunto al più Finestre di dialogo (forme) ma io voglio i pulsanti per attivare gli stessi eventi, che il motivo per cui ho inserito i pulsanti di Controllo Utente e non il Dialogo.

Quello che sto cercando di fare è, dopo aver fatto clic sul pulsante Add data ed è successo, voglio chiudere la finestra di Dialogo che il controllo si trova sul.

EDIT:

Non so come andare circa la codifica questo per chiudere la finestra di Dialogo quando viene attivato da un Utente di Controllo. Non so da dove cominciare, perché non ho usato i Controlli Utente prima. In genere ho solo i comandi in una finestra di Dialogo che permette di DialogResult = DialogResult.OK;

Grazie

Il mio suggerimento sarebbe quello di mostrarci un po ‘ di codice e di precisare che cosa si intende per “questo non funziona”. E ‘ difficile dire da qui quello che significa.
Hai ragione, è colpa mia per non essere chiaro.
La tua modifica non aiuta. Ancora non è stato il problema.
Scusate se la modifica non aiuta, non so come spiegare il mio problema, chiaramente, credo.
Cosa si dovrebbe fare è dirci di più su ciò che non funziona. C’è un errore. È la forma, semplicemente, non di chiusura. Se è la seconda quindi penso di avere la risposta.

OriginaleL’autore Taryn | 2011-03-16

6 Replies
  1. 6

    Forme aperte modale si chiude automaticamente quando il loro DialogResult è impostato. Dai suoni di esso, si sta impostando il DialogResult di controllo, non la forma. Per fare che cosa stai cercando di fare, è necessario il controllo, impostare il trigger o di impostazione del genitore forme di dialogo risultato. Si può fare questo:

    1. Passando attraverso un riferimento del modulo di controllo, che
    permette il controllo.

    2. Creare un evento sul controllo che le forme ascolta,
    che gli dice di chiudere. (recomemnded modo)

    3. (Il hacky modo) Impostare le forme di dialogo risultato utilizzando questo codice:

    this.ParentForm.DialogResult = DialogResult.OK;

    Il modulo sarà anche bisogno di essere mostrato a scelta obbligatoria, in caso contrario sarà necessario chiamare il metodo Close() manualmente.

    Fatto una piccola ricerca su dialogresult la chiusura di una finestra di dialogo modale, in base alla documentazione che abbiamo sbagliato sul vicino parte.
    Impostazione di un evento può essere un po ‘ più di lavoro, ma vorrei anche raccomandare di fare in questo modo. In definitiva, è la forma che dovrebbe essere responsabile di chiusura di per sé, non è un controllo contenitore. Un evento, dunque, informa del fatto che è stato premuto un pulsante in un controllo utente, e la forma, quindi, decide come reagire a questo evento (con la chiusura di per sé, in questo caso).
    perfetto, grazie per l’aiuto!

    OriginaleL’autore w69rdy

  2. 4

    Si desidera utilizzare delegati per risolvere questo problema.

    In codice dietro di controllo, definire un delegato che si potranno utilizzare per raccontare la maschera principale per chiudere in se stessa. Ovunque nel vostro controllo che si desidera avere il form padre vicino, si sollevano questo evento personalizzato, che sarà gestita dal form padre. Per l’amor di esempio, assum si desidera chiudere la form padre il clic su un pulsante nel controllo

    public delegate void CloseHostFormEventHandler(Object sender, EventArgs e);
    
    public partial class MyControl : Control {
    
        public event CloseHostFormEventHandler CloseFormEvent;
    
    
        public closeButton_Clicked(object sender, EventArgs) {
            //do your db stuff
    
            //you could create your own class here and pass the object to your main form if you wanted
            EventArgs myargs = new EventArgs(); 
    
            //tell host form to close itself
            CloseFormEvent(this, myargs);
    
        }
    }

    Ora nel tuo form padre, si desidera gestire l’evento generato dal controllo.

    public partial class MyForm : Form {
    
        public MyForm() {
    
            InitializeComponent();
    
            //ill assume your control was added via the designer and thus done in InitializeComponent()
    
            //hook up event handler
            mycontrol.CloseFormEvent += CloseFormEventHandler(closeformCallback);
        }
    
        protected void closeformCallback(object sender, EventArgs e) {
            DialogResult = DialogResult.OK;
            this.Close();
        }
    
    
    }
    Grazie per la fornitura il codice. Accettato risposta è corretta, ma questo ti dice come fare.

    OriginaleL’autore tsiorn

  3. 2

    Ho intenzione di prendere un ipotesi dato che non hai dato molte informazioni.

    La finestra non si chiude perchè non è una finestra di dialogo modale. Prova a parlarne con ShowDialog() piuttosto che Show().

    OriginaleL’autore David Heffernan

  4. 1

    Come Tony dice. È necessario chiamare il metodo close.

    Ciò che si potrebbe fare è passare un riferimento per la chiamata nel controllo e chiamare il metodo close.

    OriginaleL’autore Nick

  5. 1

    Si può mettere nel gestore dell’evento Click sul controllo utente qualcosa di simile a questo:

            Form f = this.ParentForm;
            if (f != null)
            {
                f.DialogResult = DialogResult.OK;
            }

    OriginaleL’autore cdel

  6. 0

    DialogResult non chiudere un non-modale form.

    È necessario chiamare il metodo Close della forma o, in questo caso la finestra di dialogo.

    MODIFICA

    O utilizzare ShowDialog() invece di Show().

    MODIFICARE DI NUOVO

    Secondo DialogResult documentazione:

    Quando un modulo viene visualizzato come una finestra di dialogo modale, fare clic sul pulsante Chiudi (il pulsante con la X in alto a destra del modulo) fa sì che il modulo per essere nascosto e la proprietà DialogResult essere impostato DialogResult.Annulla. Il metodo di chiusura non viene chiamato automaticamente quando l’utente fa clic sul pulsante di chiusura di una finestra di dialogo o imposta il valore della proprietà DialogResult. Invece, la forma è nascosto e può essere mostrato ancora una volta senza la creazione di una nuova istanza della finestra di dialogo. A causa di questo comportamento, è necessario chiamare il metodo Dispose di forma quando il modulo non è più necessario per l’applicazione.

    Se è stato aperto il modulo a scelta obbligatoria
    LOL. Non posso credere di aver dimenticato che la mia risposta. 😛
    Fatto un po ‘ di ricerca che, in base alla documentazione che abbiamo sbagliato sul vicino parte.

    OriginaleL’autore Tony Abrams

Lascia un commento