Kontrollien tekeminen ohjelmallisesti

Kysymyksen esittäjä

Miten voin Visual Basic 2005:llä tehdä ohjelmallisesti esimerkiksi PictureBoxin?
Kokonaan koskematta designeriin siis. Olisi tarvetta tollaiselle, koska tarvittavien picture boksien määrä saadaan selville vasta kun ohjelmaa ajetaan.

8

582

    Vastaukset 8

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • xxxxx

      Tee formille yksi kontrolli, jonka indeksiksi annat nollan. Tämän jälkeen voit kopioida sitä ajoaikana.

      Esim. tee KuvaKontrolli(0)
      Sitä saat kopioitua halutun määrän:
      For i=1 to LKM
      Load Kuvakontrolli(i)
      next

      • Kysymyksen esittäjä

        Hmm tajusinkohan nyt oikein.. Mihin tuo indeksi pitäisi laittaa? Ainakaan en voi tehdä pictureboxia jonka nimen perässä olisi indeksi tuolla tavalla.


      • xxxxx
        Kysymyksen esittäjä kirjoitti:

        Hmm tajusinkohan nyt oikein.. Mihin tuo indeksi pitäisi laittaa? Ainakaan en voi tehdä pictureboxia jonka nimen perässä olisi indeksi tuolla tavalla.

        Kun olet lisänyt formiin pictureboxisi. Paina sitten f4, jolloin ruudun oikeaan reunaan tulee pictureboxin propertiesit (=ominaisuudet), kuten visible, top/left ym. asetukset. Siellä on myös Index-ominaisuus. Se on aluksi tyhjä. Laita siihen nolla. Voit myös ruudussa kopioida pictureboxisi ja liittää sen samaan formiin, jolloin vb kysyy tehdäänkö siitä index-kontrolli vai annetaanko uusi nimi. Tämän jälkeen sinulla tosin on indeksit 0 ja 1, joten poista 1-indeksin kontrolli.


      • Kysymyksen esittäjä
        xxxxx kirjoitti:

        Kun olet lisänyt formiin pictureboxisi. Paina sitten f4, jolloin ruudun oikeaan reunaan tulee pictureboxin propertiesit (=ominaisuudet), kuten visible, top/left ym. asetukset. Siellä on myös Index-ominaisuus. Se on aluksi tyhjä. Laita siihen nolla. Voit myös ruudussa kopioida pictureboxisi ja liittää sen samaan formiin, jolloin vb kysyy tehdäänkö siitä index-kontrolli vai annetaanko uusi nimi. Tämän jälkeen sinulla tosin on indeksit 0 ja 1, joten poista 1-indeksin kontrolli.

        Oletko varma että se toimii VB 2005:ssä noin? Siellä propertiesseissa ei nimittäin ole indeksiä, ja jos kontrollia yrittää kopioida sille annetaan automaattisesti uusi nimi.


      • xxxxx
        Kysymyksen esittäjä kirjoitti:

        Oletko varma että se toimii VB 2005:ssä noin? Siellä propertiesseissa ei nimittäin ole indeksiä, ja jos kontrollia yrittää kopioida sille annetaan automaattisesti uusi nimi.

        Näköjään se ei onnistu tuolla tavalla VB 2005:ssä.

        Itse käytän VB 6:sta.

        Microsoft antaa näköjään ilmaiseksi ladata VB 2005:n. Joten latasin sen ja ihmettelin.

        Siinä ei tarvitsekaan olla ruudussa kontrollia etukäteen, sillä sen voi kokonaan lisätä ajoaikana.
        Se täytyy määritellä: Dim Testiobjekti As New Label()
        Ja sitten lisätä formin kontrolleihin: Me.Controls.Add(Testiobjekti)


        Tein ensimmäisen ohjelmani VB 2005:llä. Loin formiin suunniteluvaiheessa yhden labelin (Label1) ja kirjoitin siihen koodin. Aina kun labelia klikkaa, niin tehdään yksi uusi Label.

        Tässä on koodi:

        Public Class Form1

        Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

        Static LKM

        LKM = LKM 1

        Dim Testiobjekti As New Label()
        Me.Controls.Add(Testiobjekti)
        Testiobjekti.Top = Label1.Top Label1.Height * LKM
        Testiobjekti.Left = Label1.Left
        Testiobjekti.AutoSize = True
        Testiobjekti.Text = "Lisätty" Str$(LKM)
        End Sub
        End Class


      • Kysymyksen esittäjä
        xxxxx kirjoitti:

        Näköjään se ei onnistu tuolla tavalla VB 2005:ssä.

        Itse käytän VB 6:sta.

        Microsoft antaa näköjään ilmaiseksi ladata VB 2005:n. Joten latasin sen ja ihmettelin.

        Siinä ei tarvitsekaan olla ruudussa kontrollia etukäteen, sillä sen voi kokonaan lisätä ajoaikana.
        Se täytyy määritellä: Dim Testiobjekti As New Label()
        Ja sitten lisätä formin kontrolleihin: Me.Controls.Add(Testiobjekti)


        Tein ensimmäisen ohjelmani VB 2005:llä. Loin formiin suunniteluvaiheessa yhden labelin (Label1) ja kirjoitin siihen koodin. Aina kun labelia klikkaa, niin tehdään yksi uusi Label.

        Tässä on koodi:

        Public Class Form1

        Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

        Static LKM

        LKM = LKM 1

        Dim Testiobjekti As New Label()
        Me.Controls.Add(Testiobjekti)
        Testiobjekti.Top = Label1.Top Label1.Height * LKM
        Testiobjekti.Left = Label1.Left
        Testiobjekti.AutoSize = True
        Testiobjekti.Text = "Lisätty" Str$(LKM)
        End Sub
        End Class

        Kiitoksia, sain toimimaan :)


    • Kysymyksen esittäjä

      Nyt ilmaantui sellainen ongelma että pitäisi saada tehtyä subi joka ajetaan kun tuosta ajon aikana tehdystä kontrollista painaa, mutta se ei tunnu onnistuvan ainakaan niin että yksinkertaisesti laittaa Handles kontrollinNimi.Click. Mikä neuvoksi?

      • xxxxx

        Voit määritellä kontrollin eventille (esim. Click) halutun Subin näin: AddHandler Testiobjekti.Click, New EventHandler(AddressOf Testi)

        Parantelin edellistä ohjelmapätkääni. Nyt aina kun lisättyä labelia klikataan, niin sen teksin perään lisätään uusi "x".

        Public Class Form1

        Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

        Static LKM

        LKM = LKM 1

        Dim Testiobjekti As New Label()
        Me.Controls.Add(Testiobjekti)
        Testiobjekti.Top = Label1.Top Label1.Height * LKM
        Testiobjekti.Left = Label1.Left
        Testiobjekti.AutoSize = True
        Testiobjekti.Text = "Lisätty" Str$(LKM)
        'tämä suorittaa kontrollin (tai olion) eventissä Click ohjelman Testi
        AddHandler Testiobjekti.Click, New EventHandler(AddressOf Testi)

        End Sub



        Public Sub Testi(ByVal sender As System.Object, ByVal e As System.EventArgs)

        'lisätään kontrollin (eli labelin tekstin perään x)
        sender.text = sender.text "x"

        End Sub

        End Class



        Ihan tässä harjoittelun ja mielenkiinnon vuoksi vastailen. VB 2005 käsitteet poikkeavat VB6:sta melkoisesti, joten ei heti löydä vastauksia. Nyt syötin quukleen näin: vb 2005 handles runtime "as new"

        VB 2005 on ihan eri tuote kuin VB6. Todellakin sitä on parannettu todella paljon. Siirtyisin itsekin siihen, mutta kun ylläpidettävää VB6 koodia on niin paljon etten voi :(

        VB 2005 vaatii ohjelmoijalta enemmän tietoa ja taitoa kuin VB6, mutta sillä myös voi ilmeisesti tehdä vapaammin mitä tahansa. Se myös pikaisen tutustumisen aikana vaikuttaa täydelliseltä oliokieleltä (mitä VB6 ei ollut).

        Joten jos joku koodaaja tai yritys miettii millä kielellä alkaa tekemään uusia ohjelmia, niin suosittelen kyllä Visual Basic 2005:tä. Tai VB.NET-kieltä (josta en kyllä tiedä mitään).


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Uskallanko laittaa sulle viestiä?

      Se viesti on tossa valmiina ja lähettämistä vaille valmis. Kun ei kauhee sti tunneta niin eipä sillä olisi niin väliä. S
      Ikävä
      65
      1018
    2. Mikä tekee kaivatustasi

      Haluttavan?
      Ikävä
      38
      981
    3. Onko nyt kaikki asiat käyty läpi?

      Mun mielestä on👍
      Ikävä
      109
      859
    4. Mies joka on oikeasti kiinnostunut

      Ja näkee sut pitkäaikaisena kumppanina, siirtää vaikka vuoria selvittääkseen asiat eikä ota pienintäkään riskiä menettää
      Ikävä
      125
      846
    5. Vieläkin saat

      Sydämen tykyttämään. Vaikka emme näe
      Ikävä
      38
      733
    6. Rauha, sopiiko

      Ei häiritä enää toisiamme. Annetaan molemmille rauha unohtaa, pyydän tätä todella. Kiitos. Miehelle.
      Ikävä
      77
      652
    7. En tahallaan sua välttele...

      Olis niin kiva nähdä jossain muualla kuin kaupassa!
      Ikävä
      51
      626
    8. Ei siitä pääse yli, eikä ympäri!

      Pakko se on myöntää ja tunnustaa. Olisin halunnut p*nna sinua sydämeni kyllyydestä. Itseäni vanhemmalle naiselle
      Ikävä
      66
      621
    9. 42
      619
    10. Kunnanhallitus

      Miten käy täällä vuosia tuomioita jakaneelle valittajalle, hovioikeus hylännyt kaikki syytteet.
      Puolanka
      31
      606
    11. Tässä ovat Elämäni biisi vieraat lauantai 19.9. - Yksi vieras on kohuttu TTK-juontajaehdokas

      Elämäni biisi vieraslista on harvinaisen mielenkiintoinen lauantaina. Mukana myös kohuttu TTK-juontajaehdokas, josta ei
      Tv-sarjat
      2
      582
    12. Nyt kaatuu Kuisla

      Reima Kuisla hakee saneeraukseen – Joitakin velkoja on jo ulosotossa https://www.ilkkapohjalainen.fi/reima-kuisla-hakee
      Seinäjoki
      27
      563
    13. Miesten (epä)viehättävyydestä kysymys

      Mieltä askarruttava asia, liki dilemma. Palstallahan jotkut miesoletetut usein toteavat, että kaikki naiset tavoittelev
      Sinkut
      121
      526
    14. Minkä kappaleen

      haluaisit soivan, kun astellaan alttarille?
      Ikävä
      49
      518
    15. Olit hyödytön.

      Mulle hyödytön..
      Ikävä
      95
      511
    16. 50
      490
    17. Kumpi tästä nyt

      Teki niin vaikeaa?
      Ikävä
      60
      484
    18. Pystyisitkö liikkumaan

      Tai tapailemaan kaivattuasi julkisesti?
      Ikävä
      45
      446
    19. Vieläkö tykkäät

      Minusta niin paljon että olisit valmis?
      Ikävä
      35
      427
    20. Sastamalassa epäillään tappoa, kaksi otettu kiinni

      Kuulemma Aarnontiellä tapahtunut Tietääkö joku enemmän?
      Sastamala
      13
      411
    Aihe