2016-11-27 2 views
0

Je fais une chose de type boîte à outils. La boîte de dialogue non modale doit être placée en haut de l'écran et fournir des options de sélection, puis le formulaire principal doit exécuter les options en fonction du bouton qui a été poussé. Comment puis-je déterminer quel bouton est sélectionné dans le dialogue principal dans le formulaire principal ??Déterminer un bouton sélectionné dans un formulaire sans modalité Dans le principal De

+0

Je vous suggère d'afficher une partie de votre code actuel. –

+0

Un bouton n'a pas d'état de sélection. Un RadioButton fait. Vous pouvez faire ressembler une case à cocher à un bouton en définissant sa propriété Apparence sur "Bouton". S'assurer que les autres boutons sont décochés quand un tel bouton est enfoncé est à vous. –

Répondre

0

Vous disposez d'un gestionnaire d'événements dans la boîte de dialogue sans fil câblée sur chaque bouton. Quand un bouton est cliqué/basculé, ce gestionnaire d'événements se déclenche, vous indiquant ainsi que le bouton a été cliqué/basculé.

Vous souhaiterez alors probablement transférer cette notification dans votre fenêtre parente. Vous pouvez le faire en appelant un gestionnaire d'événement sur votre formulaire principal, en passant l'identifiant du bouton sélectionné dans le cadre des arguments d'événement. La seule partie délicate ici est que, pour appeler un gestionnaire d'événement sur le formulaire principal, le formulaire de la palette flottante devra maintenir une référence au formulaire principal. Vous pouvez le faire manuellement, mais il n'est pas nécessaire de le faire, car la palette flottante doit toujours être appartenant à par la boîte de dialogue principale (pour s'assurer qu'elle flotte réellement sur le dessus dans l'ordre Z), de sorte que vous peut simplement récupérer une référence à la boîte de dialogue principale en utilisant la propriété Owner de la palette flottante. Convertissez-le en type de formulaire principal et augmentez l'événement. Traitez l'événement comme vous le souhaitez dans une fonction de gestionnaire d'événements définie pour la classe de formulaire principale.

Si vous n'avez pas besoin de recevoir une notification sur votre formulaire principal, vous pouvez simplement suivre l'état dans la palette flottante et lire depuis le formulaire principal lorsque vous avez besoin de savoir de quoi il s'agit. Cela nécessitera que le formulaire principal garde une référence à la palette flottante. La façon la plus simple de le faire est d'avoir une variable membre pour la classe de formulaire principale qui contient une instance de la forme de la palette flottante. C'est la meilleure conception de toute façon, et facilitera votre capacité à accéder/définir des données sur la palette flottante à partir du formulaire principal. Il augmente légèrement le couplage, ce que certains diraient être une odeur de design orienté objet, mais ces deux objets sont, en réalité, très étroitement couplés, donc ce n'est vraiment pas un problème.

Vous remarquerez que plusieurs endroits ci-dessus, je fais référence à votre "forme modale" comme une "palette flottante". C'est parce que le design que vous décrivez est en fait un scénario assez commun dans des applications complexes comme Photoshop qui ont des fenêtres de palette flottante à partir de laquelle vous pouvez choisir un outil. Paint.NET (écrit en C#) fait exactement cela aussi, et l'implémente probablement beaucoup comme je l'ai décrit.

La chose la plus importante que les voyages de nouveaux programmeurs C# est de comprendre la différence entre une classe et un exemple d'une classe. La classe est un objet abstrait: elle contient toutes les informations nécessaires à la création d'un objet. L'instance est l'objet réel lui-même. Il existe une seule définition de classe pour chaque type de classe, mais il peut y avoir plusieurs instances/objets de chaque type de classe. Par exemple, considérez que vous avez une classe de formulaire principale nommée MainForm. Cela contient tout le code (événements, propriétés, méthodes, etc.) pour votre formulaire principal. C'est une classe. Pour réellement afficher ou interagir avec votre formulaire principal, vous devrez créer une instance de cette classe MainForm. Le problème que rencontrent les programmeurs débutants est d'essayer d'accéder aux propriétés ou d'appeler des fonctions sur la classe elle-même, plutôt qu'une instance (objet) de la classe. C'est pourquoi je suis prudent de dire que vous devez maintenir une référence à la palette flottante - par ceci je veux dire votre instance spécifique de la classe de forme de palette flottante.Assurez-vous de comprendre cette distinction. consultez votre texte préféré sur la programmation en C# (ou tout autre langage orienté objet) pour plus d'informations.