Comment créer un personnalisé MessageBox?
Je suis en train de faire une boîte de message personnalisée avec mes contrôles.
public static partial class Msg : Form
{
public static void show(string content, string description)
{
}
}
En fait j'ai besoin de passer des commandes (un gridview) dans le présent formulaire et j'ai appliqué mon propre thème pour cette fenêtre, donc je ne veux pas utiliser MessageBox
. Je veux l'appeler cela par d'autres formes comme la
Msg.show(parameters);
Je ne souhaite pas créer un objet de cette forme.
Je sais que je ne peux pas hériter de Form
classe, car elle n'est pas statique. Mais je me demande comment MessageBox
est mis en œuvre, parce qu'il est statique. Il est appelé comme MessageBox.show("Some message!");
Maintenant j'ai une erreur parce que l'héritage n'est pas permis:
Statique de la classe de MyFormName' ne peut pas dériver de type 'System.De Windows.Les formulaires.Formulaire'. Les classes statiques doivent dériver de l'objet
Comment MessageBox
est mis en œuvre alors?
Msg.Show()
est appelé.Msg
classe ne doit pas être statique pour show
à être statique.OriginalL'auteur Sen Jacob | 2011-08-03
Vous devez vous connecter pour publier un commentaire.
Votre classe de formulaire ne doit pas être
static
. En fait, une classe statique ne peut pas hériter à tous les.Au lieu de cela, créer un
internal
formulaire de classe qui dérive deForm
et de fournir unpublic static
méthode d'aide à montrer.Cette méthode statique peut être définie dans une classe différente si vous ne voulez pas que les appelants même de “savoir” à propos de la forme sous-jacente.
Note de côté: Jalal souligne, vous n'avez pas à faire une classe
static
afin d'avoirstatic
méthodes. Mais je voudrais encore distincte de l ' “aide” de la classe à partir de la forme même si les appelants ne peuvent pas créer le formulaire avec un constructeur (sauf s'ils sont dans la même assemblée, bien sûr).ouais, à l'aide de cette classe interne, j'ai pu éviter d'appeler les constructeurs, C'était un concept nouveau pour moi... encore une fois Merci pour l'explication.
Oui—mais cela ne fonctionne que lorsque vous définissez ces classes dans un ensemble distinct. Une autre option serait de déclarer la
Form
classe à l'intérieur l'assistance statique et de le déclarerprivate
mais vous perdrez le concepteur je pense donc que ce n'est pas la peine.en utilisant (var form = new CustomMessageForm (titre, description)) { formulaire.ShowDialog ();} pourriez-vous expliquer pourquoi vous avez utilisé var? .......... nouveau CustomMessageForm (titre, description).showDialog(); ce code a un problème à être un code programmé? Désolé, je n'ai pas encore eu la chance de pouvoir apprendre ces concepts. Je veux juste apprendre ces bonnes pratiques
permet au compilateur de déduire le type pour vous afin que vous n'avez pas à écrire le nom de deux fois
CustomMessageForm form = new CustomMessageForm
. Je vous suggère de google d'abord, mais aussi de lire thread. Généralement, s'il vous plaît poster une nouvelle question sur son propre lieu de discussion dans les commentaires.OriginalL'auteur Dan Abramov
Vous n'avez pas besoin de la classe à être statique.
Juste faire quelque chose comme:
Show
n'est pas modale, vous devriez appelerShowDialog
).OriginalL'auteur Lior Ohana
Je viens d'écrire un seul fichier de remplacement pour MessageBox qui est un bon exemple de la manière de "imiter" la statique de l'interface de MessageBox. Vous pouvez le télécharger ici et à l'utiliser comme une norme MessageBox:
http://www.codeproject.com/Articles/601900/FlexibleMessageBox-A-flexible-replacement-for-the
Ce Qui Concerne, Jörg
Serait plus grande si elle n'a Case de prise en charge!
OriginalL'auteur jreichert
Vous n'avez pas besoin de faire de la classe
static
afin d'appeler une de ses méthodes de façon statique — il suffit de déclarer la méthode particulière questatic
.Nous utilisons
messageBox.ShowDialog()
avoir la forme affichée comme une modal fenêtre. Vous pouvez afficher la boîte de message à l'aide deDetailedMessageBox.ShowMessage("Content", "Description");
.Par le chemin, vous devez repenser votre manière de nommer et de s'en tenir à un modèle de nommage cohérent.
Msg
etshow
sont faibles noms qui ne font pas de match le Règles De Nommage — vous seriez certainement voulez vérifier ces!OriginalL'auteur Marius Schulz
Dans un projet WPF, vous pouvez ajouter une nouvelle fenêtre et l'appeler MessageBoxCustom puis à l'intérieur de C# le Vide où vous pouvez trouver InitialiseComponent(); vous ajoutez 2 propriétés et lient ces propriétés à la textBlocks, vous devez avoir créé à l'intérieur de votre vue en XAML
Exemple:
forms
etwinforms
...OriginalL'auteur TGB