TextBox KeyDown - zadanie iba niektorych znakov VB.NET   otázka

VB.NET

Dobry den do databazy vpisujem a prepisujem niejake kody ktore su v hex sustave a robim to cez textbox riadok kde by som potrboval aby som mohol zadat iba znaky 0-9, a-f, A-F, backspace, enter, ctrl+c a ctrl+v.

Moj problem je v tom ze ak nezadam tie riadky kodu kde je pouzite ctrl+c a ctrl+v vsetko je OK ale ak tie dva riadky pridam uz mi program nefunguje. A este je to lepsie riesit cez KeyDown alebo cez KeyPress? Vedel by niekto prosim poradit?

Vdaka

Marcel

    Private Sub TextBox2_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox2.KeyDown

        If (e.KeyCode < 48 Or e.KeyCode > 57) AndAlso                           ' od 0-9
           (e.KeyCode < 65 Or e.KeyCode > 70) AndAlso                           ' od A-F
           (e.KeyCode < 97 Or e.KeyCode > 102) AndAlso                          ' od a-f
           (e.KeyCode <> 8) AndAlso                                             ' backspace
           (e.KeyCode <> 13) AndAlso                                            ' enter
           (e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.C) AndAlso      ' ctrl+c
           (e.Modifiers = Keys.Control AndAlso e.KeyCode = Keys.V) Then         ' ctrl+v

            e.Handled = True
            MsgBox("Zadať môžte len znaky 0..9, a..f, A..F", MsgBoxStyle.Information)
        End If

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

Zdravím,

asi bych za předpokladu, že uživatel vložil text pomocí ctrl+v (což již ověřujete, ale nereagujete na to korektně) validoval celý obsah textboxu, zda-li je validní hexadecimální kód (pořešit třeba regexem), jinak hláška typu: "hele tohle není validní hexa kód" ... a smazat obsah :)

Každopádně mi ta podmínka přijde opačně položená, asi bych podmínil validní vstupy a jen "jinak" chybu ... tedy do bloku "if" bych dal případ, že je vstup OK (v tomto případě asi prázdný kód, což se výjimečně, zejména z důvodu čitelnosti kódu stává :))) ) a do bloku "else" chybovou zprávu ... Nevím, přijde mi to přirozenější a čitelnější, ale je to můj osobní názor a třeba se na toto téma ještě rozvine diskuse.

R.

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

Ahoj skusal som to aj pomocou regex takto

 If Not Regex.IsMatch(e.KeyChar, "[0-9a-fA-F]") Then
     e.KeyChar = Nothing
     MsgBox("Zadať môžte len znaky 0..9, a..f, A..F", MsgBoxStyle.Information)
 End If

ale neviem do toho zamontovat to "ctrl+c (v)" neviem si s tym rady

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

Takto sa mi to nakoniec podarilo. Mozno to tiez niekomu pomoze...

If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso (e.KeyChar < "A" OrElse e.KeyChar > "F") AndAlso     
   (e.KeyChar < "a" OrElse e.KeyChar > "f") AndAlso e.KeyChar <> ControlChars.Back AndAlso 
   (Asc(e.KeyChar) <> 13) AndAlso (Asc(e.KeyChar) <> 3) AndAlso (Asc(e.KeyChar) <> 22) Then '3-ctrl+c 22-ctrl+v
   e.Handled = True
   MsgBox("Zadať môžte len znaky 0..9, a..f, A..F", MsgBoxStyle.Information)
End If
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