pohyb PictureBox pomocí kurzorových šipek   zodpovězená otázka

VB.NET, WinForms

Prosím o radu, mám jednoduché okno, které obsahuje pouze malý obrázek. Pomocí Timer a změny Picturebox1.Top a PictureBox2.left pohybuji automaticky obrázkem. Pomocí RND automaticky měním náhodně směr pohybu obrázku.

Nyní bych chtěl, abych mohl pohyb obrázku řídit pomocí kurzorových šipek (nahoru, dolů, vlevo, vpravo - jiné úhly ne).

Zkoušel jsem odchytit událost Form1.KeyPress i KeyDown (u PictureBox požadovaná událost není).

Lada

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

Můžete klidně použít událost KeyDown ale musíte nejprve nastavit vlastnost KeyPreview na True. Vlastnost KeyPreview určuje, že všechny události ohledně kláves budou nejdříve zpracovány na úrovni formuláře a teprve potom v ovládacích prvcích.

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

Neměl by být problém zaměnit náhodná čísla (potažmo polohu PictureBox) za čísla řízená stiskem kurzorové klávesy. Pro "odchyt" stisku klávesy je nutné forrmuláři nastavit "Me.KeyPreview = True". Pak musí jít ošetřit stisk kurzorových kláves. Zde je ošetření stisku klávesy nahrazeno MsgBox (neznám váš kód k pohybu PictureBox):

 Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles MyBase.Load
     Me.KeyPreview = True
   End Sub

   Private Sub Form1_KeyDown(ByVal sender As Object, _
       ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
     If e.KeyCode = Keys.Left Then
       MsgBox("Stisknuta šipka vlevo")
     End If
     If e.KeyCode = Keys.Right Then
       MsgBox("Stisknuta šipka vpravo")
     End If
     If e.KeyCode = Keys.Up Then
       MsgBox("Stisknuta šipka nahoru")
     End If
     If e.KeyCode = Keys.Down Then
       MsgBox("Stisknuta šipka dolu")
     End If
   End Sub
 End Class

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

Diky, uz mi to funguje! Na tu vlastnost KeyPreview jsem vubec nevzpomnel :)

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

Měl bych jeden dotaz.

Při stisku kurzorových kláves se negeneruje událost KeyDown. Kupodivu událost KeyUp ANO. Lze to nějak vysvětlit ?

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

Vysvětlil by to tak, že nemáte pravdu. Jak víte, že "se negeneruje událost KeyDown"? Zkuste Debug.Print.

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

Zdravím, dal by se pohyb obrázku vyřešit i bez nutnosti stisknutí šipek? Myslím, to tak, že se obrázek bude například pohybovat v určitých bodech vpravo a vlevo a tento pohyb se bude opakovat ?

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