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

0

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"
Przechwytywanie.PNG

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

Możesz to zrobić na dwa sposoby - albo przechwycić wyjątek FormatException, czyli objąć to, co masz wewnątrz button1_Click w:

try
{
    // tutaj twój kod
}
catch (FormatException)
{
    // tutaj co ma zrobić jak błąd
}

Albo skorzystaj z kolegi Convert.ToDouble, który nazywa się Double.TryParse:

string a = "1.2";
double wzrost = 0;
bool powiodlo = double.TryParse(a, out wzrost);

// i teraz masz zmienną powiodło w której masz czy się udało (tak/nie)
// a w zmiennej wzrost masz skonwertowaną wartość, jeśli się powiodło
0

@Ktos: okey, ale dlaczego w drugiej opcji a="1.2";?

0

Zamiast a użyj sobie swojego txtWzrost.Text, to był tylko przykład :)

0

A sama wartość 1.2 z czego wynika? Nie potrafię tak na szybko teraz zrozumieć :/

0

Przykład to jest, równie dobrze może tam być "18.5"

0

Super, bardzo dziękuje za pomoc. Przetestuje podpowiedzi :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1