D'autres ont donné la bonne réponse à la question comme indiqué. A savoir que vous devriez appeler le RecoDoseSize
majuscule si vous voulez utiliser le getter/setter.
Cependant, il est extrêmement mauvais d'afficher une boîte de message à l'intérieur du setter, car cela viole le Principe de Least Surprise.
Lorsque quelqu'un regarde la ligne RecoDoseSize = double.Parse(textBox8.Text);
il n'est pas du tout évident que cette opération puisse provoquer l'apparition d'une boîte de message. Il existe parfois des exceptions où il est logique d'avoir une modification de l'interface utilisateur du déclencheur Setter (par exemple, la propriété Visible
sur les contrôles) mais la valeur par défaut devrait toujours être de ne pas le faire, sauf si vous êtes sûr qu'il sera plus déroutant Faites-le (par exemple, il serait surprenant si vous définissez Visible = false
mais il était encore visible).
En ce qui concerne votre commentaire sur la façon dont vous devriez le mettre en œuvre, le contrôle doit être fait dans le gestionnaire de clic et la propriété peut être juste un auto-propriété, comme ceci:
public double RecoDoseSize { get; set; }
private void Submit2_Click(object sender, RoutedEventArgs e)
{
TotalContentProduct = double.Parse(textBox7.Text);
double enteredSize;
if (!double.TryParse(textBox8.Text, out enteredSize) || enteredSize <= 0)
{
MessageBox.Show("Please Enter the recommended dose size for this product");
textBox8.Focus();
return;
}
RecoDoseSize = enteredSize;
NoOfDosespUnit = TotalContentProduct/recoDoseSize;
}
Vous voulez utiliser TryParse, car avec Parse vous obtiendrez une erreur si le texte n'est pas un double
valide. Ce que TryParse fait est de retourner true
ou false
selon qu'il a réussi, et il remplit le paramètre out avec le résultat s'il est réussi.
Donc ce que cela fait est si elle échoue à analyser le résultat, ou le résultat est <= 0
il montre la boîte de message. Dans ce cas, il est également return
s de la méthode, donc le reste n'est pas exécuté.Alternativement le reste de la méthode pourrait être dans un bloc else
auquel cas le return
n'est pas nécessaire. C'est une question de style qui est préféré.
Je ne suis pas si clair sur l'exemple de code. RecoDoseSize est-il identique à RecoDoseSize ou s'agit-il d'une variable privée sans rapport? Faites-vous référence à this.RecoDoseSize? – dawebber
La raison pour laquelle vous obtenez un 0 dans le cas que vous avez décrit est que ParseMethod fait de son mieux sur une valeur par défaut de la propriété Text dans la zone de texte. – dawebber
@dawebber: Puisque le getter de RecoDoseSize renvoie recoDoseSize, je suppose qu'ils sont liés. ;-) – Heinzi