Ochrana u kalkulačky proti textu   zodpovězená otázka

VB.NET, Komponenty, Algoritmy

Potřeboval bych pomoct s kalkulačkou jak máte zde: http://www.vbnet.cz/clanek--4-vb_net_od_... , již ji mám hotovou, ale hold jsem začátečník s Visual Basic tak když do ní napíšu text tak mi program spadne a i když tam nenapíšu číslo a ani text tak taky spadne při sčítání, odčítání, ...

Předem díky za pomoc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Použijte MaskedTextBox (nastavíte masku)."spadne a i když tam nenapíšu číslo a ani text " To uděláte pomocí podmínky.Ověříte jestli je MaskedTextBox prázdný nebo ne.Pokud by byl tak se vyvolí např. hláška.(Kód píšu rovnou)

if MaskedTextBox1.text = "" then 
msgbox ("Policko je prazdne",vbcritical+ vbokonly,"Chyba")
else 
'Vase funkce pro soucet.....'
End If

Pro zajímavost: http://blog.vrchlickeho.cz/Articles/9.as...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Radši než MaskedTextBox1.text = "" použít String.IsNullOrEmpty. Zjišťuje jestli je ukazatel platný a zároveň jej porovná s String.Empty. Prázdné uvozovky vytvoří zbytečně novou instanci Stringu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nevím, ale za jednodušší bych považoval použití jiného systému přetypování vstupů na číslo int.

Místo kontroly všech možných i nemožných stavů obsahu textových polí použijte pro přetypování místo cint(...) tryparse(...), které se pokusí provést příslušné přetypování, a vrací logickou hodnotu true, pokud se přetypování povedlo (přetypovanou hodnotu pak obdržíte v parametru funkce), či false, pokud z jakéhokoliv důvodu selhalo.

Příklad použití třeba:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a, b As Integer
        If Integer.TryParse(TextBox1.Text, a) And Integer.TryParse(TextBox2.Text, b) Then
            TextBox3.Text = (a + b).ToString
        Else
            TextBox3.Text = "Chybný vstup!"
        End If
    End Sub

nebo si s kalkulačkou můžete ještě pohrát trochu jiným způsobem, že umožníte zmáčknout tlačítko funkce pouze při relevantních vstupech:

Public Class Form1
    Dim a, b As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox3.Text = (a + b).ToString

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged
        Button1.Enabled = Integer.TryParse(TextBox1.Text, a) And Integer.TryParse(TextBox2.Text, b)
    End Sub
End Class

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Jen trocha terminologie - v tomto případě nejde o přetypování, ale o konverzi - převedení. Výraz přetypování používáme v případě, že data jsou nějakého datového typu, ale vystupují v proměnné, která je typu jiného - např. integer v proměnné typu object nebo instance třídy A v proměnné typu, ze kterého je A odvozen. Přetypování je většinou velmi rychlá operace.

Konverze se používá při převodu nějakého typu na typ úplně jiný a na pozadí si s sebou nese dost složité mechanismy - převod integeru nebo data na string a opačně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za upřesnění - zní to vcelku logicky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback