Morjens..
Minulla on formilla 250 buttonia joiden kokoa pitäisi saada kasvatettua kun hiiri viedään päälle, ja taas pienennettyä kun se jätetään. Kasvattaminen ja pienentäminen kyllä onnistuu, mutta en viitsi tehdä jokaiselle buttonille omaa tapahtumaa.
Miten saan liitettyä saman tapahtuman käsittelijäksi kaikki 250 buttonia, muuten kuin lisäämällä ne sinne peräkkäin?
Toivottavasti joku ymmärsi...
Tämä koodi luo halutun määrän nappeja ja lisää niille yhteiset käsittelijät.
Private Sub Klikkaus(ByVal sender As Object, ByVal e As System.EventArgs) Dim tunnus As String tunnus = CType(sender, Button).Tag MsgBox("Painoit napista " & tunnus) End Sub Private Sub Suureksi(ByVal sender As Object, ByVal e As System.EventArgs) CType(sender, Button).Width = 50 CType(sender, Button).Height = 50 End Sub Private Sub Pieneksi(ByVal sender As Object, ByVal e As System.EventArgs) CType(sender, Button).Width = 10 CType(sender, Button).Height = 10 End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim nappi As Button Dim i As Integer For i = 1 To 10 nappi = New Button nappi.Left = 10 + i * 55 nappi.Top = 10 nappi.Width = 10 nappi.Height = 10 nappi.Tag = i AddHandler nappi.Click, AddressOf Klikkaus AddHandler nappi.MouseLeave, AddressOf Pieneksi AddHandler nappi.MouseEnter, AddressOf Suureksi Controls.Add(nappi) Next End Sub
Kiitos Antti, tuo AddHandler oli juuri se mitä hain.
Vielä kun saisi Fontin kokoa muutettua. Se ei ainakaan minulta onnistunut ihan noin kuten koon muuttaminen?
Pystynkö vielä jotenkin välittämään parametreina korkeuden ja leveyden noille Suureksi ja Pieneksi aliohjelmille?
Voit muuttaa fonttia tähän tapaan:
CType(sender, Button).Font = New Font("Arial", 20)
Kerro vähän tarkemmin, miten haluat määrittää korkeuden ja leveyden.
Siis, voinko antaa korkeuden ja leveyden aliohjelmalle parametreina?
esim tähän tapaan:
Private Sub Suureksi(ByVal sender As Object, ByVal e As System.EventArgs, ByVal Korkeus as Integer, ByVal Leveys as Integer) CType(sender, Button).Width = Leveys CType(sender, Button).Height = Korkeus End Sub
Mitä siis laitan tuossa tapauksessa näihin kohtiin?
AddHandler nappi.MouseEnter, AddressOf Suureksi(???,???,30,50)
Tapahtuman käsittelevään aliohjelmaan ei voi lisätä omia parametreja. Jos kuitenkin kerrot tarkemmin, mitä haluat tehdä, asian voi varmasti toteuttaa tavalla tai toisella.
Kas vain, muutin viestiä juuri samaan aikaan kun vastasit.
En pysty juuri nyt kertomaan tarkemmin... jälkikasvu häiritsee sen verran.
Palaan asiaan illemmalla.
Noniin, jälkikasvu on nukkumassa.
Mitään varsinaista ongelmaahan tässä ei enää ole, mutta kuten jo kerroin niin;
Formilla on 250 buttonia jotka on luotu dynaamisesti formia ladatessa. Buttonit ovat tilanpuuteen vuoksi niin pieniä, ettei buttonissa olevasta tekstistä saa juurikaan selvää. Ajattelin, että homma ratkeaa kasvattamalla buttonin ja fontin kokoa kun hiiri viedään päälle.
Homma toimii nyt, mutta olisin halunnut antaa kaiken tarvittavan tiedon buttonista sen luonti vaiheessa, joita olisi ollut helppo muuttaa tarvittaaessa.
Suurentamis- ja pienentämisaliohjelma myös siirtää buttonin paikkaa puolet kokojen erotuksesta, jotta buttonin keskikohta säilyisi paikoillaan.
Nyt en voi käyttää hyödyksi esim. jo luotivaiheessa annettuja korkeutta ja leveyttä buttonin pienentämis ohjelmassa MouseLeave eventissä...
Voit merkitä nappien luonnissa nappien sijainnit ja koot taulukkoon, josta ne on helppoa tarkistaa tarvittaessa.
Taulukon määrittely ennen aliohjelmia:
' taulukossa on tilaa 300 napille ja ' jokaiselle napille 4 luvulle Dim tiedot(300, 4) As Integer
Tietojen lisäys taulukkoon silmukassa:
' sijainti tiedot(i, 0) = 10 + i * 55 tiedot(i, 1) = 10 ' koko tiedot(i, 2) = 10 tiedot(i, 3) = 10
Tietojen hakeminen taulukosta:
' missä kohdassa nappi on taulukossa Dim kohta As Integer kohta = CType(sender, Button).Tag ' tietojen hakeminen CType(sender, Button).Left = tiedot(kohta, 0) CType(sender, Button).Top = tiedot(kohta, 1) CType(sender, Button).Width = tiedot(kohta, 2) CType(sender, Button).Height = tiedot(kohta, 3)
Aihe on jo aika vanha, joten et voi enää vastata siihen.