Väcsi / mensi   zodpovězená otázka

VB.NET, WinForms

Dobry den som trosku zmäteny lebo som dnes zistil chybu v mojom serverovom programe a to pri zistovani ci preslo viacej kb ako by normalne malo..

Tu je kod :

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text <= "40" Then
            MsgBox("Prenesenych vyse 40kb")
        ElseIf TextBox1.Text <= "80" Then
            MsgBox("Prenesenych vyse 80kb")
        Else
            MsgBox("nothing")
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If TextBox3.Text >= "40" Then
            MsgBox("Prenesenych vyse 40kb")
            'ked napisem do textbox 3 cislo 50 tak napise ze bolo prenesenych vyse 40kb
        ElseIf TextBox3.Text >= "80" Then
            MsgBox("Prenesenych vyse 80kb")
            'ked napisem do textbox3 100 tak nenapise ze bolo prenesenych vyse 80kb ale napise nothing teda ako keby tam nebolo nic napisane alebo mensie ako 39 :(
        Else
            MsgBox("nothing")
        End If
    End Sub
End Class

(v button2 su poznamky s problemami ktore sa mi vyskytli)

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

no nieco som poskusal a prisiel som nato ze treba do elseif dat aj moznost opacneho znamienka teda na zaciatku If =

ElseIf >

ElseIf <

Tu je kod:

If TextBox3.Text = TextBox4.Text Then
            MsgBox("cislo sa rovna " + TextBox4.Text + "=" + TextBox4.Text)
        ElseIf TextBox3.Text >= TextBox4.Text Then
            MsgBox("cislo väcsie ako " + TextBox4.Text)
        ElseIf TextBox3.Text <= TextBox4.Text Then
            MsgBox("cislo je mensie ako " + TextBox4.Text)
        End If

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

Len by som Vás chcel upozorniť, že kód tak ako ho uvádzate tu, nemôže v žiadnom prípade fungovať. Podľa tohto kódu by číslo mohlo byť zároveň väčšie aj menšie ako TextBox4.Text.

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

Dobrý den, je potřeba si uvědomit že Textbox.Text vrací datový typ string, takže nemůžete čekat, že při porovnávání dvou stringů Vám to bude vracet výsledek, který by jste očekával při porovnávání dvou čísel (Porovnávat 2 stringy které reprezentují číslo je prasárna a nemůže to fungovat). Výstup z textboxu musíte přetypovat třeba na integer a porovnávat to zase s číslem (tzn. že číslo nebude v uvozovkách). Např. takto:

        If Integer.Parse(TextBox1.Text) <= 40 Then
            MsgBox("Prenesenych vyse 40kb")
        ElseIf Integer.Parse(TextBox1.Text) <= 80 Then
            MsgBox("Prenesenych vyse 80kb")
        Else
            MsgBox("nothing")
        End If

Jen si musíte dát pozor a ošetřit případné vyjímky které můžou nastat, když by uživatel zadal do textboxu něco jiného než číslo, popř kdyby textbox zůstal prázdný (mohl by jste např. použít místo Integer.Parse metodu Integer.TryParse která vrátí False, když zadaný řetězec nejde přetypovat.

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

Neviem presne o čo Vám ide, ale ak výstup z Text.Boxu neprevediete na číselný typ, tak VB zoradzuje hodnoty ako text, a preto napríklad 8 je väčšie ako 100.

Toto by malo, ak som sa nepomýlil, fungovať správne.

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If CInt(TextBox3.Text) <= CInt(TextBox1.Text) Then
            MsgBox("Čislo je menšie alebo rovné " & TextBox1.Text)
        ElseIf CInt(TextBox3.Text) > CInt(TextBox1.Text) And CInt(TextBox3.Text) <= CInt(TextBox2.Text) Then
            MsgBox("Čislo je väčšie ako " & TextBox1.Text & " a zároveň menšie alebo rovné " & TextBox2.Text)
        ElseIf CInt(TextBox3.Text) > CInt(TextBox2.Text) Then
            MsgBox("Čislo je väčšie ako " & TextBox2.Text)
        End If
    End Sub

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

Přesně tak, porovnávání stringů funguje abecedně a ne číselně.

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

Dakujem velmi pekne pomohli ste mi :) .

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