Existe-t-il un moyen standard de renvoyer les valeurs des boîtes de dialogue personnalisées dans Windows Forms ?

StackOverflow https://stackoverflow.com/questions/36984

  •  09-06-2019
  •  | 
  •  

Question

Donc, pour le moment, mon projet comporte quelques boîtes de dialogue personnalisées qui font des choses comme demander à l'utilisateur son anniversaire, ou autre.Pour l'instant, ils font juste des choses comme établir un this.Birthday propriété une fois qu'ils ont obtenu une réponse (qui est de type DateTime?, avec le nul indiquant un "Annuler").Ensuite, l'appelant inspecte le Birthday propriété de la boîte de dialogue qu'il a créée pour comprendre ce que l'utilisateur a répondu.

Ma question est, existe-t-il un modèle plus standard pour faire des choses comme celle-ci ? Je sais que nous pouvons définir this.DialogResult pour les éléments de base OK/Annuler, mais existe-t-il un moyen plus général dans Windows Forms pour qu'un formulaire indique « voici les données que j'ai collectées » ?

Était-ce utile?

La solution

Je dirais qu'exposer les propriétés sur votre boîte de dialogue personnalisée est la voie idiomatique à suivre, car c'est ainsi que les boîtes de dialogue standard (comme Select/OpenFileDialog) le font.Quelqu'un pourrait dire qu'il est plus explicite et révélateur de l'intention d'avoir une méthode ShowBirthdayDialog() qui renvoie le résultat que vous recherchez, mais suivre le modèle du framework est probablement la voie la plus judicieuse.

Autres conseils

existe-t-il un modèle plus standard pour faire des choses comme celle-ci ?

Non, il semble que vous utilisiez la bonne approche.

Si la boîte de dialogue renvoie DialogResult.OK, supposez que toutes les propriétés nécessaires dans la boîte de dialogue sont valides.

Pour moi, s'en tenir à la boîte de dialogue renvoyant les réponses de boîte de dialogue standard, puis accéder aux résultats via les propriétés est la voie à suivre.

Deux bonnes raisons d'où je suis :

  1. Cohérence : vous faites toujours la même chose avec un dialogue et la nature même de la question suggère que les modèles sont bons (- :Mais la question est également de savoir si c’est un bon modèle ?
  2. Cela permet le retour de plusieurs valeurs à partir de la boîte de dialogue - ok, il y a une toute nouvelle discussion ici aussi, mais le pragmatisme appliqué signifie que c'est ce que l'on veut dans certaines circonstances, ce n'est pas toujours approprié ou souhaitable de regrouper les valeurs juste pour que vous puissiez les retransmettre. tout en une seule fois.

Le flux logique est sympa aussi :

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

C’est une bonne question – nous sommes censés remettre en question des choses comme celle-ci – mais pour moi, le modèle actuel est correct.

Murph

Pour les boîtes de dialogue de saisie modale, je surcharge généralement ShowDialog et distribue les paramètres pour les données dont j'ai besoin.

DialogResult ShowDialog(out datetime birthday)

Je trouve généralement qu'il est plus facile de découvrir et de comprendre que de mélanger mes propriétés avec les 100+ exposées par la classe Form.

Pour les formulaires, j'ai normalement un contrôleur et une interface IView qui utilise des propriétés en lecture seule pour transmettre des données.

Je l'ai toujours fait exactement comme vous le décrivez.Je suis curieux de voir s'il existe une approche plus acceptée.

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