Question

J'ai créé un contrôle utilisateur dans mon application qui a une zone de texte, puis deux boutons. Un bouton est d'ajouter des données à la base de données de la zone de texte et la seconde annule l'action. Cet utilisateur La commande est ensuite ajouté à de multiples formes (Dialogs) mais je veux les boutons pour déclencher les mêmes événements, que la raison pour laquelle je les boutons placés sur le contrôle de l'utilisateur et non pas la boîte de dialogue.

Ce que je suis en train de faire est après avoir cliqué sur le bouton Ajouter des données et il est réussi, je le veux pour fermer la boîte de dialogue que le contrôle se trouve.

EDIT:

Je ne sais pas comment aller sur le codage cette touche pour fermer la boîte de dialogue lorsqu'il est déclenché à partir d'un contrôle de l'utilisateur. Je ne sais pas où commencer parce que je ne l'ai pas utilisé Contrôles utilisateur avant. En général, j'ai juste les contrôles sur une boîte de dialogue qui permet de DialogResult = DialogResult.OK;

Merci

Était-ce utile?

La solution

Les formulaires ouverts de façon modale se ferme automatiquement lorsque leur DialogResult est réglé. Des sons de celui-ci, vous définissez la DialogResult du contrôle, et non la forme. Pour ce faire, qu'est-ce que vous essayez de faire, vous avez besoin du contrôle pour définir ou déclencher le réglage du résultat des formulaires parents. Vous pouvez le faire soit:

1. En passant par une référence de la forme de la commande, qui permet le contrôle pour le régler.

2. Créer un événement sur le contrôle que les formes écoutes à, qui dit à fermer. (chemin recomemnded)

3 (La façon hacky) Définir résultat de dialogue des formulaires en utilisant ce code:.

this.ParentForm.DialogResult = DialogResult.OK;

Le formulaire devra également être montré de façon modale, sinon vous devrez appeler la méthode Close () manuellement.

Autres conseils

Vous voulez utiliser des délégués pour résoudre ce problème.

Dans le code derrière de votre contrôle, définir un délégué que vous utiliserez pour dire votre formulaire principal de se fermer. Chaque fois que dans votre contrôle, vous voulez avoir la forme de parent proche, vous élèverez cet événement personnalisé qui sera gérée par votre formulaire parent. Par souci d'exemple, nous allons ASSUM vous voulez fermer le formulaire parent sur un bouton, cliquez dans le contrôle

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

    }
}

Dans votre formulaire parent, vous voulez gérer l'événement soulevé par le contrôle.

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


}

Je vais faire une supposition sauvage puisque vous ne l'avez pas donné beaucoup d'informations.

La boîte de dialogue ne se ferme pas, car il n'est pas une boîte de dialogue modale. Essayez le montrer avec ShowDialog() plutôt que Show().

Comme le dit Tony. Vous auriez besoin d'appeler la méthode close.

Ce que vous pouvez faire est de passer une référence à l'appel de dans votre contrôle et appeler sa méthode proche de là.

Vous pouvez mettre dans le gestionnaire d'événements Cliquez sur quelque chose de votre contrôle utilisateur comme ceci:

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

DialogResult ne se ferme pas une non modal forme.

Vous devez appeler la méthode Close de la forme ou dans ce cas dialog.

EDIT

Ou utilisez ShowDialog () au lieu de Show ().

EDIT DE NOUVEAU

Selon DialogResult documentation :

Quand un formulaire est affiché comme une boîte de dialogue modale, en cliquant sur le bouton Fermer (le bouton avec un X dans le coin en haut à droite de la forme) provoque la forme à cacher et la propriété DialogResult à régler à DialogResult. Annuler. La méthode Close n'est pas appelée automatiquement lorsque l'utilisateur clique sur le bouton Fermer d'une boîte de dialogue ou définit la valeur de la propriété DialogResult. Au lieu de cela, la forme est cachée et peut être affiché à nouveau sans créer une nouvelle instance de la boîte de dialogue. En raison de ce comportement, vous devez appeler la méthode Dispose du formulaire lorsque le formulaire n'est plus nécessaire par votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top