• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator BMI. Obsługa błędu przy wpisywaniu stringa.

Object Storage Arubacloud
+1 głos
554 wizyt
pytanie zadane 28 grudnia 2020 w C# przez Tukan Nowicjusz (190 p.)

Dzień dobry,

Mam problem przy obsłudze błędu w moim kalkulatorze BMI. Mianowicie kiedy wpisuję w textboxa ciąg literek, to chciałbym, żeby mój "program" dał sobie radę z tym i wyświetlił komunikat "błąd danych"

Nie za bardzo wiem jak zapisać w kodzie, że jeżeli w textboxa jest wpisywany string to wyświetl komunikat " błąd danych"

OTO MÓJ KOD: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CS_BMI_Calc
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void label5_Click(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            txtMasa.Clear();
            txtWzrost.Clear();
            txtBmi.Clear();
            txtBmi.BackColor = Color.White; 
            lblwynik.Text = "";
            lblwynik.BackColor = Color.White; 
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit(); 
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (txtMasa.Text != "" && txtWzrost.Text != ""  && Convert.ToDouble(txtMasa.Text) > 0 && Convert.ToDouble(txtWzrost.Text) > 0)
            {
                txtBmi.BackColor = Color.White; 

                double masa = Convert.ToDouble(txtMasa.Text);
                double wzrost = Convert.ToDouble(txtWzrost.Text) / 100;
                double BMI = masa / (wzrost * wzrost);
                txtBmi.Text = String.Format("{0:f}",BMI);

                if (BMI < 18)
                {
                    lblwynik.Text = "Niedowaga !!!";
                    txtBmi.BackColor = Color.PowderBlue;
                }
                else if (BMI < 24.99)
                {
                    lblwynik.Text = "Waga Prawidłowa";
                    txtBmi.BackColor = Color.Green;
                }
                else
                {
                    lblwynik.Text = "NADWAGA !!!";
                    txtBmi.BackColor = Color.Red; 
                }
            }
            else lblwynik.Text = "Błąd danych"; 
        }

        private void lblwynik_Click(object sender, EventArgs e)
        {

        }
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 29 grudnia 2020 przez VBService Ekspert (253,340 p.)
edycja 29 grudnia 2020 przez VBService

Można "odwrócić" sytuację i zablokować wpisywanie innych znaków niż dozwolone. wink

  1. W sekcji kodu z using dopisz using System.Text.RegularExpressions;
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions; // <-- ;-)
    using System.Threading.Tasks;
    using System.Windows.Forms;
  2. W sekcji kodu z public Form1() dopisz
     
            public Form1()
            {
                InitializeComponent();
    
                // Nie można używać menu kontekstowego (prawy myszy)
                  txtMasa.ShortcutsEnabled = false;
                txtWzrost.ShortcutsEnabled = false;
                // TextBox bmi tylko do odczytu  ;-)
                txtBmi.ReadOnly = true;
            }
  3. W sekcji kodu dopisz
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace CS_BMI_Calc
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                // Nie można używać menu kontekstowego (prawy myszy)
                  txtMasa.ShortcutsEnabled = false;
                txtWzrost.ShortcutsEnabled = false;
                // TextBox bmi tylko do odczytu  ;-)
                txtBmi.ReadOnly = true;
            }
     
            . . .
    
            private void txtMasa_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (OnlyDigits(sender, e))
                {
                    e.Handled = true; 
                }
                           
            }
            private void txtWzrost_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (OnlyDigits(sender, e))
                {
                    e.Handled = true; 
                }
                           
            }
            private bool OnlyDigits(object sender, KeyPressEventArgs e)
            {
                bool bReturn = false;
                // Dozwolone tylko cyfry 0-9 i tzw. znaki kontroli (delete, backspace, left arrow itp.)
                if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) bReturn = true;
                // Dozwolona tylko jedna kropka dziesiętna
                if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) bReturn = true;
                // Dozwolone tylko dwie cyfry po kropce (np.: waga 71.5 kg, wzrost 172.55 cm)
                if (Regex.IsMatch((sender as TextBox).Text, @"\.\d\d") && !char.IsControl(e.KeyChar)) bReturn = true;
                
                return bReturn;            
            }
    
            . . .
        }
    }
    
  4. W pliku Form1.Designer.cs (dwuklik lewym myszy - otworzy się kod)



    w sekcji private void InitializeComponent() { ... }, dopisz
     
            private void InitializeComponent()
            {
    
                . . .
    
                // 
                // txtMasa
                // 
    
                this.txtMasa.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtMasa_KeyPress);
    
    
                // 
                // txtWzrost
                // 
               
                this.txtWzrost.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtWzrost_KeyPress);
    
            }
    
  5. Wtedy możesz: 

     else lblwynik.Text = "Błąd danych"; 
    
     na np.: 
    
     else lblwynik.Text = "Proszę podać masę i wzrost"; 

    AA

Podobne pytania

+1 głos
2 odpowiedzi 2,362 wizyt
pytanie zadane 25 września 2021 w JavaScript przez void6 Użytkownik (790 p.)
0 głosów
2 odpowiedzi 1,220 wizyt
pytanie zadane 26 marca 2021 w Java przez Paluch22 Nowicjusz (230 p.)
0 głosów
2 odpowiedzi 384 wizyt
pytanie zadane 29 października 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...