2009-10-09 5 views
4

Je suis à la recherche d'un remplacement décent pour les fenêtres standard OUI/NON ou OUI/NON/ANNULER MessageBox.Remplacement pour oui/non/annuler MessageBox (C#)

J'ai souvent vu ces boîtes de dialogue standard mal utilisées de la manière suivante: "Pour enregistrer en texte clair, répondre OUI, ou enregistrer en HTML répondre NON". De toute évidence, le texte devrait lire "Enregistrer sous: et les" boutons devraient être étiquetés "Texte" et "HTML". Ce n'est pas une question de oui/non qui est posée, et bien que cela puisse être formulé de cette façon, il ne serait pas facile à lire et à comprendre.

Microsoft ne permet pas de modifier le texte sur les boutons. Il n'y a pas de moyen rapide/simple de construire un remplacement à partir de zéro ... comme en témoigne le nombre d'applications utilisant le style maladroit mentionné ci-dessus.

Y at-il Dialoguer # gratuit C de remplacement ou MessageBox là-bas qui vous permet au moins:
- spécifier le nombre de boutons
- spécifier le texte à afficher sur chaque bouton
- spécifiez le bouton par défaut

J'ai regardé et j'ai été incapable d'en trouver un.

(Je voudrais en construire un moi-même, mais je ne suis pas assez familier avec tous les comportements qu'un contrôle entièrement fonctionnel devrait avoir, puisque je n'ai besoin/utiliser/connaître qu'un petit sous-ensemble. et internationalisation J'ai besoin de quelque chose que mes collègues voudront également utiliser.)

+0

Bien sûr, le bon moyen est juste de poser la bonne question: "Voulez-vous enregistrer votre document en texte brut?" – EFraim

+2

Mais si vous répondez "non", cela signifie-t-il qu'il est sauvegardé crypté? Non, il faut beaucoup plus de texte pour l'expliquer clairement comme une question oui/non. –

Répondre

6

Découvrez Dissecting the MessageBox sur CodeProject. Le projet est un peu daté, mais c'est à peu près exactement ce que vous cherchez et il ne devrait pas prendre grand chose pour le mettre à jour.

+0

Cela, en effet, semble bien. Il comprend plusieurs «extras» dont mes collègues peuvent avoir besoin ou aimer. Et puisqu'il est dans la source, il peut même être adapté/étendu. Merci. –

3

Selon votre plate-forme cible, un task dialog peut être un bon moyen de le faire. Il y a un wrapper .NET pour les boîtes de dialogue de tâche dans le Windows API Code Pack. Franchement, ils ne sont fournis que sous Windows Vista et plus, pas sous XP ou 2003.

+0

Merci, mais nous devons absolument supporter XP maintenant. Mais la réponse peut aider les autres! –

2

Franchement, il n'est pas si difficile de créer un tel Messagebox, nous avons une telle chose qui fonctionne dans l'application actuelle que nous développons.

Ce dont vous avez besoin est un FlowLayout pour les boutons qui vont automatiquement aligner les boutons que vous créez. Notre API a alors quelque chose comme (params Tuple chaîne <, DialogResult > [] boutons)

Tuple est une classe d'aide qui contient deux valeurs. La chaîne est le texte du bouton, le Dialogresult est celui que notre boîte à messages renvoie lorsque l'on clique sur le bouton avec ledit texte.

2

Je suis d'accord avec Frank. Il ne serait pas trop difficile de créer votre propre formulaire générique qui gère cela pour vous. Sans entrer dans le code, le formulaire devrait faire ce qui suit:

1) Avoir une propriété pour définir le message que vous voulez montrer à l'utilisateur.

2) Avoir une méthode pour ajouter des boutons, avec 2 arguments, l'un pour le texte du bouton, et un pour le résultat dialogue

3) Lorsque le formulaire est affiché, il doit être en mode de dialogue modale de sorte que le reste de l'application est inactif tant que vous n'avez pas cliqué sur l'une des options.Par conséquent, pour créer un enregistrement sous/ne pas enregistrer/annuler, vous devez ajouter 3 boutons à l'étape 2, tous avec le texte du bouton approprié et le résultat de la boîte de dialogue. En utilisant la mise en page Flow, vous devriez pouvoir l'afficher correctement quelle que soit la taille du message ou le nombre de boutons.