Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: VB.Net, MouseHover eventti usealle buttonille

Sivun loppuun

novice [04.12.2009 21:27:27]

#

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...

Antti Laaksonen [05.12.2009 13:14:44]

#

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

novice [05.12.2009 15:53:49]

#

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?

Antti Laaksonen [05.12.2009 16:13:46]

#

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.

novice [05.12.2009 16:48:33]

#

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)

Antti Laaksonen [05.12.2009 17:10:01]

#

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.

novice [05.12.2009 17:12:50]

#

Kas vain, muutin viestiä juuri samaan aikaan kun vastasit.

En pysty juuri nyt kertomaan tarkemmin... jälkikasvu häiritsee sen verran.
Palaan asiaan illemmalla.

novice [05.12.2009 20:57:40]

#

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ä...

Antti Laaksonen [05.12.2009 23:22:32]

#

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)

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta