Conversion from string "" to type 'Double' is not valid.   otázka

VB.NET

Zdravím mám taký malý problém s týmto kódom keď kliknem na pridať nový do databázy hodí my to takúto chybu:

Conversion from string "" to type 'Double' is not valid.

Tu je ten kód:

Private Sub MNOŽSTVO_NR_KGTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MNOŽSTVO_NR_KGTextBox.TextChanged

If MNOŽSTVO_NR_KGTextBox.Text >= 1 And MNOŽSTVO_NR_KGTextBox.Text <= 8 Then

ÚROVEŇ_KONTROLYTextBox.Text = "II"

PÍSMENOTextBox.Text = "A"

KUSY_NA_KONTROLUTextBox.Text = "2"

End If

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

Porovnáváte text z textboxu s číselnou hodnotou. Dojde tak k automatické konverzi textu z TextBocu na číslo typu Double. Pokud není konverze možná, nastane k uvedená chyba. Konverze není možná, když do texboxu zadáte něco jiného než číslici, tj. písmeno, jiný nečíselný znak nebo nic ("" - prázdný řetězec - to je případ, který uvádíte v příspěvku).

Musíte také počítat s tím, že událost TextChanged se provede po každé změně, tj. po každém vložení znaku, vymazání či úpravě existujícího textu.

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

Ja len doplním, že je možné skúsiť skonvertovať na Double aj bez výnimky. Samozrejme, že dotyčnému nevyjde z tej konverzie číslo, ale 1) sa dozvie, že konverzia zlyhala, a 2) nenastane výnimka, ktorá by proces spomalila.

Dim vysledok As Double
Dim vstup As String
If Double.TryParse(vstup, vysledok) Then
REM konverzia uspesna, vysledok je v premennej vysledok
Else
REM konverzia zlyhala
End If

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

V případě selhání bych volil vyprázdnění výstupních boxů a Exit Sub.

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

Tak to je skvelé! Najlepšie do handlera události .TextChanged ! :P

Prečo by ste chceli zmazať uživateľovi dáta len preto, že hodnoty nie sú správne? Predstavte si, že na fomrulári bude 20 takýchto "samomazacích" textboxov, vyplníte všetky, niekde náhodou preklep, stlačíte tlačítko, a fuk, všetko je preč. Neporazí Vás?

Ja by som jednoducho upozornil užívateľa, že tam napísal blbosť, buď MessageBox, alebo radšej ToolTip.

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

Nechápete, jak funguje .TextChanged. V dané situaci (ta není moje, reaguji na to, co napsal tazatel) pokud např. uživatel chce vložit či změnit hodnotu v prvním TextBoxu, musí původní hodnotu vymazat nebo přepsat a během přepisování dojde ke stavu, kdy osah nelze konvertovat na číslo. V ten okamžik jej chcete obtěžovat zbytečnou hláškou.

Jestli je obsah dalších TextBoxů závislý na prvním a ten první neobsahuje, co má, tj. v tazatelově případu číslo, pak obsah závislých TextBoxů (dvou, proč vymýšlíte 20?) je neplatný a tudíž zbytečný. A jestli uživatel udělá překlep, zase v tu chvíli existující hodnoty jsou neplatné a proto zbytečné. Po zadání platné hodnoty dostanou závislé platnou hodnotu.

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

Chlapi ďakujem za odpovede, nakoniec som to vyriešil takto:

Private Sub MNOŽSTVO_NR_KGTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MNOŽSTVO_NR_KGTextBox.TextChanged

If MNOŽSTVO_NR_KGTextBox.Text = "" Then

MNOŽSTVO_NR_KGTextBox.Text = 0

End If

If MNOŽSTVO_NR_KGTextBox.Text >= 1 And MNOŽSTVO_NR_KGTextBox.Text <= 8 Then

ÚROVEŇ_KONTROLYTextBox.Text = "II"

PÍSMENOTextBox.Text = "A"

KUSY_NA_KONTROLUTextBox.Text = "2"

End If

Private Sub MNOŽSTVO_NR_KGTextBox_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MNOŽSTVO_NR_KGTextBox.KeyPress

Dim allowedChars As String = "0123456789"

If e.KeyChar <> ControlChars.Back Then

If allowedChars.IndexOf(e.KeyChar) = -1 Then

' Neplatný znak

e.Handled = True

End If

End If

End Sub

FUNGUJE TO TERAZ TAK AKO TO MÁ EŠTE RAZ VĎAKA PETER

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

Nahoře dialogu pro vložení příspěvku je volba "VB code". Ta vloží dvě trojice znaků "|" - mezi ně se vkládá kód, který je pak upraven (formátován) tak, aby byl lépe čitelný:

 Private Sub MNOŽSTVO_NR_KGTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MNOŽSTVO_NR_KGTextBox.TextChanged
 '....
 ' tak vypadá poznámka, a tak String"
 Dim allowedChars As String = "0123456789"
  '...
 End Sub

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

Viem že to bude mimo témy ale nedá sa my neopýtať.

Ako by sa dala spraviť šablóna v MS EXCEL napríklad ako tu:

http://www.vbnet.cz/clanek--53-prace_s_d...

Potreboval by som už do hotového dokumentu v MS Excel exportovať dáta do presne stanovených polí excel súboru

Ďakujem Peter

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