6
votes

Vous recherchez un élégant "ne me montre pas cette boîte de dialogue" dans la boîte de dialogue C #

Je cherche une boîte de dialogue avec une case à cocher "Don's montre-moi cette boîte de dialogue" en C #.

J'ai googlé et cherchez beaucoup, mais je ne pouvais tout simplement pas trouver une solution élégante.

La boîte de dialogue doit fonctionner aussi similaire que la messagerie nativebox.Show, mais avec une nouvelle valeur de propriété (valeur BOOL) retour à l'appelant.

Merci.


0 commentaires

3 Réponses :


3
votes

Pourquoi ne créez-vous pas le vôtre. C'est très simple. Décrivez simplement de System.Windows.Forms.Form Classe et imitez-la comme celle que vous voulez.


3 commentaires

Ce n'est pas aussi simple que ce que je pensais. MessageBox a des sélections de boutons différentes et des sélections d'icônes, et j'en ai aussi besoin. Si je pouvais dériver de MessageBox, ça va être si bon. Mais nous ne pouvons pas dériver que MessageBox, car il n'y a pas de constructeur public ou de constructeur public.


@Peter Lee - J'ai eu un problème similaire à Java. La bibliothèque standard fournit à toutes ces bonnes boîtes de dialogue de messages à la recherche standard, mais dès que vous souhaitez personnaliser la boîte de dialogue, vous perdez toutes les ressources de largeur / hauteur standard, des ressources d'icône, de la mise en place des boutons, des largeurs de boutons, des marges de fenêtre, etc. Devait creuser dans les tripes de faible niveau de la façon dont Java construit ses dialogues pour s'assurer que mes dialogues personnalisés ont suivi la dialogue standard et la sensation. Ce n'était pas amusant, et cela m'a laissé vouloir une manière normalisée de le faire. Au moins, le concepteur GUI Visual Studio est livré avec de bonnes valeurs par défaut intégrées.


@Peter Lee: C'est certainement possible de dupliquer tous les styles possibles que la standard MessageBox fournit dans votre propre boîte de dialogue personnalisée. C'est plus de travail, mais c'est quelque chose que vous pouvez réutiliser encore et encore. Cet exemple (qui recrée un TaskDialog de style Vista où il n'est pas disponible dans les versions précédentes du système d'exploitation) est un excellent exemple de la façon dont vous pourriez faire cela: codeproject.com/kb/vb/vdialog.aspx



0
votes

Je ne pense pas qu'il y aura une solution réaymade comme telle. Pour la mise en œuvre «Ne pas me montrer de nouveau», vous devez persister les informations en dehors du dailog et créer un profil utilisateur.

Si votre infrastructure de persistant le profil utilisateur est là, vous pouvez créer une classe similaire à la classe MessageBox . Vous ne pouvez pas dériver de MessageBox Toutefois.


2 commentaires

"Ne me montre pas à nouveau" ou non, je l'ai sauvé dans les paramètres.Settings.


Donc, vous devrez créer une boîte de dialogue.



8
votes

Les applications Vista et Windows 7 peuvent utiliser les nouvelles fonctionnalités TaskDialog qui étendent les messages de messagerie standard pour prendre en charge une case à cocher en bas (ainsi que toutes sortes d'autres goodies telles que les liens de commande, le texte de bouton personnalisé, les pieds de page, etc.).

texte alt

Malheureusement, de C #, vous devez faire une interoption pour y accéder. Si vous voulez juste que les TaskDialogs avancés ciblent Vista / Windows 7, utilisez le Windowsapicodepack à partir de http: //code.msdn .microsoft.com / Windowsapicodepack qui peut gérer la complexité interopt pour vous.

Si vous devez prendre en charge XP, il existe une excellente enveloppe qui prend en charge les tâches de tâches natives sur Vista / 7 avec une replie WinForms pour XP ici: http://www.corefroject.com/kb/vista/vista_taskdialog_wrapper.aspx


2 commentaires

codeProject.com/kb/vista/vista_taskdialog_wrapper.askx fonctionne fantastique. J'ai testé sur Win7 et WinXP. Merci.


Est quelque chose de similaire maintenant disponible pour Windows 10?