Zdravím. Mám tu takový menší problém. Tvořím jeden malý program ve Visual studiu pro výpočet průměru fresnelovy zóny, ale narazil jsem na jednu potíž. Chtěl jsem vytvořit ošetření proti písmenům v textboxu (Zadané hodnoty musí být pouze číselné) pomocí try and catch. Detekce písmen funguje v pořádku, protože zpráva o přítomnosti písmen se zobrazí, ale problém je v tom, že se program nezastaví, abych mohl hodnotu opravit, ale pokračuje dále, čímž aplikace spadne kvůli písmenům se kterými nemůže počítat. Kdysi v jednoduché kalkulačce jsem toto udělal bez problému díky prvku ve switchi, ale zde to udělat nemohu.
Zde je kód:
namespace Project_Fresnel
{
public partial class Form1 : Form
{
const double svetlo = 300000;
const double tis = 1000; // Deklarace konstantních proměnných pro převody jednotek
const double des = 10;
const double pol = 2;
double n, m;
public Form1()
{
InitializeComponent();
}
private void Osetreni_pismen()
{
try
{
n = double.Parse(txbvlndel.Text);
m = double.Parse(txbvzdalen.Text);
}
catch
{
MessageBox.Show("Zadejte číslo, nikoli písmeno!"); }
}
private void Fresnelova_Zona()
{
//***********************************************************************************
//Výpočet průměru fresnelovy zóny
double frekvence = Convert.ToDouble(txbvlndel.Text); // Načtení frekvence z txbvlndel
double helpfrek = svetlo / frekvence; // Výpočet vlnové délky v mm
double vlndel = helpfrek / des; // Dělení vlnové délky 10 -> výsledek v cm
double vzdalenost = Convert.ToDouble(txbvzdalen.Text); // Načtení vzdálenosti vysílačů z txbvzdalen
double polovina = vzdalenost / pol; // Výpočet poloviny vzdálenosti vysílačů (Největší průměr)
double hs = polovina * polovina;
double zlom = hs / vzdalenost;
double ns = vlndel * zlom;
double pr = Math.Sqrt(ns);
double prumer = pr / des;
prumer = Math.Round(prumer*100)/100; // Zaokrouhlování na 2 desetinná místa
txbprum.Text = prumer.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
Osetreni_pismen();
Fresnelova_Zona();
}
}
}
Děkuji za každou radu a odpověď.