trivialita, moja smrť   otázka

Komponenty, WinAPI

Ahojte.

Najprv banálny problém:

Dva textboxy, dve tlačítka - txtLogin, txtPassword, btnOK, btnCancel.

Private Sub txtLogin_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtLogin.KeyDown
        If e.KeyCode = Keys.Return Then
         SendKeys.Send("{TAB}")          
        End If

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        CtrlEngine()
        Me.Close()
    End Sub

Nechápem, ale ani takýto triviálny kód mi nefunguje. Našli ste nejakú chybu? Po napísaní prihlasovacieho mena v TextBoxe (txtlogin) mi automaticky vykoná procedúru, ktorá je definovaná až v udalosti btnOK_click. Jednoducho namiesto toho, aby sa kurzor presunul do nasledujúceho TextBoxu, nepresunie sa nikam, ale tvári sa to, že so mstlačil button OK. Ale ja som nič nestlačil :)

Dokonca som u tlačítka OK pre istotu aj nastavil TabStop=false.

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

Pochopiteľne, End Sub tam samozrejme mám, VS 2010 by ma ďalej nepustilo. Len som to zabudol skopírovať.

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

Doporučuji použít v tomto případě KeyUp.

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

txtPassword.Focus misto SendKeys.Send("{TAB}")

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

Ani KeyUp, ani Focus.

Nechápem.

Form má KeyPreview=false.

Žiadnu inú funkciu ani procedúru nevolám.

Iba a cisto to, co som uviedol.

A napriek tomu mi po vložení Enter vyhodnotí (asi prázdne) heslo a použije message z procedúry CtrlEngine

If Not hashdata Then
        MsgBox("Invalid Username and Password!!")
End If

- ktorá len vyhodnocuje heslo. Ale k nej by sa vôbec program dostat nemal.

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

Tak som si to skúsil odladiť pomocou Debug Step (F8) a Debug Breakpoint.

Private Sub txtLogin_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtLogin.KeyDown
        If e.KeyCode = Keys.Return Then
            '    SendKeys.Send("{TAB}")
            txtPass.Focus()
        End If
End Sub

A tu už končím s možnosťami, neuveriteľné!

Ak napíšem do txtLogin akýkoľvek znak, normálne mi ho skontroluje, to znamená, prejde udalosť txtLogin_KeyDown, preskočí txtPass.Focus - pretože sa nejedná o Return/Enter.

ALE...Akonáhle do TextBoxu vložím Enter, program ani na udalosť KeyDown neskočí, ale PRIAMO skočí na

Private Sub OK_Click... (kde nastáva vyhodnotenie hesla)

Takže pri stlačení Enter udalosť KeyDown ani NEKONTROLUJE.

Stretávam sa s tým prvýkrát.

P.S. Rovnako sa správa pri KeyUp.

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

zkontrolujte si na formu vlastnost AcceptButton zda není přiřazen pro btnOK

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

AcceptButton - BINGO! :)

Stále so mmal pociť, že niečo prehliadam.

Jasné!

Použil som default login formulár z VS 2010, tam to je tak nastavené.

Ďakujem za záchranu života :)

P.S. A tým pádom klasicky funguje SendKeys.Send("{TAB}")

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