Pole a cyklus   zodpovězená otázka

VB.NET, Architektura, Algoritmy

Dobrý den, mám tento pokusný kód:

Dim mList As New List(Of Point)
Dim a, b, c, d, ee, f As Point
        a.X = 50
        b.Y = 50
        c.X = 100
        d.Y = 100
        ee.X = 150
        f.Y = 150
mList.Add(a)
        mList.Add(b)
mList.Add(c)
        mList.Add(d)
mList.Add(ee)
        mList.Add(f)
Cursor.Position = New Point(a)
        Cursor.Position = New Point(b)

Zajímalo by mě, jak napsat cyklus, např. For_Next, tak, aby tyto pozice kurzoru proběhly jedna za druhou.

Pro jednotlivou pozici je to jasné

Cursor.Position = New Point(a)

Cursor.Position = New Point(b)

ale dál nevím.

Díky za případné rady.

Marcel Borna

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

For Each MyPoint as Point in mList
   Cursor.Position = MyPoint
Next

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

Díky, ale proč to stále vrací pouze jednu pozici?

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

Tady to máte celé:

        Dim mlist As New List(Of Point)
        mlist.Add(New Point(50, 50))
        mlist.Add(New Point(100, 100))

        For Each MyPoint As Point In mlist
            Cursor.Position = MyPoint
        Next

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

Ještě musíte vytvářet instance objektů Point. A nemusíte to dělat přes mezi proměnné, ale přímo.

Dim a, b, c, d, ee, f As NEW Point

lépe

mlist.add(new point(50,50))
...

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

Děkuji za trpělivost.

Budu tu za pitomce, ale celé to vypadá takto:

Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
  Dim mList As New List(Of Point)
        mlist.Add(New Point(50, 50))
        mlist.Add(New Point(100, 100))

        For Each MyPoint As Point In mlist
            Cursor.Position = MyPoint
        Next

A stále to vrací jen jednu pozici.Tak nevím...

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

A není to tím, že nepostřehnete změnu protože to je opravdu rychlé? Zkuste si to odtrasovat a uvidíte že to funguje.

nebo tam zkuste přidat

System.Threading.Thread.Sleep(2000)

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

Doprdele!!! Máte pravdu!!!! Tak už to chápu!Tenhle kód, ale v jiné úpravě, jsem už zkoušel snad milionkrát. Týkalo se to i

  If MouseButtons = Windows.Forms.MouseButtons.Right Then
mList.Add(Cursor.Position)

atd.

Děkuji mockrát. A to opravdu.

Být začátečníkem je fakt dřina.

Marcel Borna

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

Odpusťte si příště ta sprostá slova, chápu, že máte radost, ale trochu se kroťte ;-).

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

Pozor na to, Point enní objekt, ale struktura, tedy hodnotový typ. New Point zavolat můžete, ale pokud tam to New nebude, bude se to chovat úplně stejně. Struktury jsou inicializované již při nadeklarování.

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

Dobrá poznámka:) Myslel jsem, že struktury se už příliš nepoužívají a tak jsem to ani nepotřehl. Proč se vlastně ještě používají?

Má struktura něco co nemá objekt?

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

Nikdo nikdy neříkal, že se struktury již nepoužívají. Ono obecně se nepoužívají tak často, ale určité důvody pro to jsou. Rozdíl je v tom, že struktury jsou typ hodnotový, kdežto instance třídy jsou referenční. Samozřejmě objekty toho umí víc, například dědičnost.

Význam struktur a to, proč tam vlastně jsou, je kvůli výkonu. Pokud budu nějak chtít reprezentovat bod (což jsou dva integery nebo floaty nebo něco takového), tak tato struktura zabere třeba 8 bajtů. Protože je to hodnotový typ, není s ní žádná další režie, je prostě buď na zásobníku, nebo přímo v datové oblasti objektu na haldě. Pokud máte třídu, tak jenom kvůli tomu, abyste vytvořil instanci třídy, ej potřeba kromě samotných dat objektu i 8 bajtů režijních informací + ještě pár bajtů pro Garbage Collector a správce heapu. Struktury tuto režii nenesou, samozřejmě zase je pomalejší, pokud s nimi děláte nějaké složité operace, hodně je přiřazujete atd., to se pak kopírují bloky paměti místo jednoduchých referencí.

Zkrátka když něco obsahuje jednu nebo dvě proměnné a nemá to nějakou složitější logiku, pak se z důvodu výkonu udělá raději struktura. Jinak je velmi dobré udělat si v tom jasno. Pokud píšete běžné aplikace a ne nějaké výkonově náročné věci, pak používejte třídy. V jistých případech se ale struktury hodí.

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

děkuji za podrobný popis. Myslím, že v mých aplikacích bych asi našel pár míst, kde bych mohl použít struktury místo tříd. Každá optimalizace se vždy hodí.

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