Problème pour faire une suite d'opérations en C#
Résolu
Eaglewin
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
Eaglewin Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Eaglewin Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Cela fait plusieurs mois que je cherche la solution, mais je ne trouve pas j'espère que vous pourrez m'aider. Je suis débutant en C#. Je vous explique mon problème : je code une calculatrice en C# et en UWP. Je voudrais faire un enchainement d'opérations sans cliquer la touche égal. J'ai essayé quelque chose qui marche, mais la deuxième fois que je fais cet enchaînement, cela ne marche plus. Peut être qu'avec la commande PerformClick() cela marchera mais je ne la trouve pas en UWP alors que dans les Windows Forms cette commande s'affiche. Peut être existe t'il un équivalent pour l'UWP ?
Merci d'avance
Je vous joint quelques photos de mon code pour que vous puissiez mieux vous repérer.
Bonne journée
Cordialement



Cela fait plusieurs mois que je cherche la solution, mais je ne trouve pas j'espère que vous pourrez m'aider. Je suis débutant en C#. Je vous explique mon problème : je code une calculatrice en C# et en UWP. Je voudrais faire un enchainement d'opérations sans cliquer la touche égal. J'ai essayé quelque chose qui marche, mais la deuxième fois que je fais cet enchaînement, cela ne marche plus. Peut être qu'avec la commande PerformClick() cela marchera mais je ne la trouve pas en UWP alors que dans les Windows Forms cette commande s'affiche. Peut être existe t'il un équivalent pour l'UWP ?
Merci d'avance
Je vous joint quelques photos de mon code pour que vous puissiez mieux vous repérer.
Bonne journée
Cordialement



A voir également:
- Problème pour faire une suite d'opérations en C#
- Télécharger opera mini pour pc - Télécharger - Navigateurs
- Votre solde est insuffisant pour effectuer cette operation. veuillez recharger votre compte. - Forum Illustrator
- L'opération demandée nécessite une élévation ✓ - Forum LibreOffice / OpenOffice
- Photoshop impossible d'effectuer cette opération en raison d'une erreur du programme - Forum Photoshop
- La vidéo à télécharger va 5 fois plus vite que sa vitesse normale. divisez sa vitesse par 5 pour rétablir sa vitesse normale. après cette opération, combien de papillons figurent entre la 17e et la 18e seconde ? ✓ - Forum Montage et acquisition vidéo
10 réponses
Bonjour,
Pour que l’on puisse faire quelque chise avec ton code, c’est pas des captures d’écran qu’il nous faut.
C’est le code copié collé et mis en couleur avec les balises dédiées, voir explications ici https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Pour que l’on puisse faire quelque chise avec ton code, c’est pas des captures d’écran qu’il nous faut.
C’est le code copié collé et mis en couleur avec les balises dédiées, voir explications ici https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Bonjour,
Voici donc le code :
Le deuxième :
Et le dernier :
J'espère que cela pourra vous aider
Cordialement
Voici donc le code :
private void button5_Click(object sender, RoutedEventArgs e) { Button b = (Button)sender; if (result != 0) { operation = Convert.ToString(b.Content); txtDisplay.Text = (result / Double.Parse(txtDisplay.Text)).ToString(); result = Double.Parse(txtDisplay.Text); txtDisplay.Text = ""; IbIShowOps.Text = result + " " + b.Content; enter_value = true; } else { operation = Convert.ToString(b.Content); result = Double.Parse(txtDisplay.Text); IbIShowOps.Text = result + " " + b.Content; enter_value = true; } firstnum = IbIShowOps.Text; }
Le deuxième :
private void btnEquals_Click(object sender, RoutedEventArgs e) { secondnum = txtDisplay.Text; IbIShowOps.Text = ""; switch (operation) { case "+": txtDisplay.Text = (result + Double.Parse(txtDisplay.Text)).ToString(); break; case "-": txtDisplay.Text = (result - Double.Parse(txtDisplay.Text)).ToString(); break; case "X": txtDisplay.Text = (result * Double.Parse(txtDisplay.Text)).ToString(); break; case "/": txtDisplay.Text = (result / Double.Parse(txtDisplay.Text)).ToString(); break; default: break; } result = Double.Parse(txtDisplay.Text); operation = "";
Et le dernier :
Double result = 0; String operation = ""; bool enter_value = false; String firstnum, secondnum; public MainPage() { this.InitializeComponent(); }
J'espère que cela pourra vous aider
Cordialement
En fait, je voudrais faire un enchainement d'opérations sans cliquer sur la touche égal. Par exemple, si on touche une fois la touche diviser je voudrais calculer les deux nombres entrés précédemment et cela plusieurs fois. Je ne sais pas si je suis très clair, sinon référez vous au message qui a ouvert le sujet. J'espère que vous pourrez résoudre mon problème.
Bonne soirée
Cordialement
Bonne soirée
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'avais relu le premier message, mais je n'étais pas sûr d'avoir bien compris.
Le problème selon moi, est un problème récurrent chez les débutants.
Tu te sers de l'interface graphique comme source de données.
C# est un langage tout objet (tout ce que l'on utilise est un objet, tape
L'idée principale de la programmation objet est de spécialiser ses classes et de les faire travailler ensemble.
Imaginons une classe "Calculatrice"
Elle pourrait avoir une méthode SaisieChiffre qui prend un caractère en paramètre.
Cette méthode ajouterait le chiffre correspondant au nombre en cours.
Du coté de l'interface, tous les clicks des boutons représentant les chiffres appellent cette méthode
D'une part tu fais calculs sur des nombres et pas sur du texte. Ça parait logique non? Et pourtant, ça n'est pas ce que tu as codé.
En te servant de quelques variables tu peux stocker, un résultat temporaire (tant que égal n'est pas tapé), un opérateur intermédiaire et un nombre en cours.
En plus tu peux binder ton affichage sur le résultat ou sur une propriété que tu construis exprès.
Voir ici un aperçu du binding en WPF https://codes-sources.commentcamarche.net/faq/11277-apercu-du-binding-en-wpf
Et ici, un tour d'horizon de la programmation objet en C# https://codes-sources.commentcamarche.net/faq/11239-la-programmation-objet-appliquee-a-net-par-l-exemple-partie-1-sur-3
Pour les codes, j'ai tapé de tête, y'a p'tet une boulette ou 2, et j'ai pas gérés les chiffres après la virgule.
Le problème selon moi, est un problème récurrent chez les débutants.
Tu te sers de l'interface graphique comme source de données.
C# est un langage tout objet (tout ce que l'on utilise est un objet, tape
"n'importe quel texte".et intellisense va te proposer les quelques méthodes d'une instance de string.
L'idée principale de la programmation objet est de spécialiser ses classes et de les faire travailler ensemble.
Imaginons une classe "Calculatrice"
Elle pourrait avoir une méthode SaisieChiffre qui prend un caractère en paramètre.
Cette méthode ajouterait le chiffre correspondant au nombre en cours.
public double NombreEnCours {get; set;} = 0; public void SaisieChiffre(char Chiffre) { int chiffre; if (int.TryParse(Chiffre, out chiffre) { NombreEnCours *= 10 + chiffre; } }
Du coté de l'interface, tous les clicks des boutons représentant les chiffres appellent cette méthode
private void buttonChiffres_Click(object sender, RoutedEventArgs e) { bouton b = sender as Button; if (b != null) { maCalculatrice.SaisieChiffre(b.Texte); } }
D'une part tu fais calculs sur des nombres et pas sur du texte. Ça parait logique non? Et pourtant, ça n'est pas ce que tu as codé.
En te servant de quelques variables tu peux stocker, un résultat temporaire (tant que égal n'est pas tapé), un opérateur intermédiaire et un nombre en cours.
- Si tu tapes égal, le résultat final sera le résultat temporaire "opéré" par le nombre en cours,
- si c'est un opérateur alors résultat temporaire sera le résultat temporaire "opéré" par le nombre en cours, et l'opérateur deviendra le nouveau tapé.
En plus tu peux binder ton affichage sur le résultat ou sur une propriété que tu construis exprès.
Voir ici un aperçu du binding en WPF https://codes-sources.commentcamarche.net/faq/11277-apercu-du-binding-en-wpf
Et ici, un tour d'horizon de la programmation objet en C# https://codes-sources.commentcamarche.net/faq/11239-la-programmation-objet-appliquee-a-net-par-l-exemple-partie-1-sur-3
Pour les codes, j'ai tapé de tête, y'a p'tet une boulette ou 2, et j'ai pas gérés les chiffres après la virgule.
Bonjour, merci pour votre code qui m'a aidé. Pourriez vous me donner un exemple pour les variables où sera stocké le résultat temporaire car je ne sais pas trop comment m'y prendre. En effet, je suis débutant et collégien. Merci d'avance.
Bonne journée
Cordialement
Bonne journée
Cordialement
Un truc comme ça
class Calculatrice { public double NombreEnCours { get; set; } = 0; public double Resultat { get; set; } = 0; private double resultatTemporaire = double.NaN;//Nan => not a number private string operateur = null; public void SaisieChiffre(string Chiffre) { int chiffre; if (int.TryParse(Chiffre, out chiffre)) { NombreEnCours *= 10 + chiffre; } } public void SaisieOperateur(string Operateur) { if (operateur == null)//on est au premier nombre { resultatTemporaire = NombreEnCours; } else { //On calcule l'opération précédente CalculOperation(); } //on remet le nombre en cours à zéro et on enregistre le nouvel opérateur NombreEnCours = 0; operateur = Operateur; } private void CalculOperation() { switch (operateur) { case "+": resultatTemporaire += NombreEnCours; break; //etc default: //cas d'un opérateur non prévu throw new Exception("Opérateur non codé"); } } public void SaisieEgal() { CalculOperation(); Resultat = resultatTemporaire; //on RAZ les variables NombreEnCours = 0; operateur = null; resultatTemporaire = double.NaN; } }
Merci beaucoup, j'ai appris plein de choses grâce à vous ! Tout fonctionne merci encore !
Bonne soirée
Cordialement
Bonne soirée
Cordialement
Je te conseille de suivre ce cours
https://tahe.developpez.com/dotnet/csharp/
Ça te prendra quelques jours, mais il te donnera de bonnes base en C#
https://tahe.developpez.com/dotnet/csharp/
Ça te prendra quelques jours, mais il te donnera de bonnes base en C#