Dynamische Gemaakte label veranderen van dynamische picturebox

Status
Niet open voor verdere reacties.

f1s1ck

Gebruiker
Lid geworden
12 nov 2013
Berichten
5
Hallo,

Ik heb een vraagje:
Ik heb een dynamisch gemaakte picturebox met deze code:
Code:
            Dim newpic As New PictureBox
            Controls.Add(newpic)
            newpic.BackColor = Color.Transparent
            newpic.Width = 277
            newpic.BringToFront()
            newpic.Visible = True
            newpic.Parent = Votes
            newpic.BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld.png")
            newpic.BackgroundImageLayout = ImageLayout.Stretch
            newpic.Location = New Point(0, height2)

Hierna maak ik een Dynamische label aan:
Code:
            Dim newlabel As New Label
            Controls.Add(newlabel)
            Dim f2 As New System.Drawing.Font("SketchFlow Print", 10)
            newlabel.Font = f2
            newlabel.ForeColor = Color.Orange
            newlabel.Text = line
            newlabel.Parent = newpic
            newlabel.Location = New Point(5, 18.5)
            newlabel.Visible = True
            newlabel.BringToFront()
            newlabel.Name = line
            newlabel.BackColor = Color.Transparent
            newlabel.Width = 266

Nu heb ik 3 addhandles gemaakt, zodat ik de mousehover kan detecteren van de picturebox, En de mouseleave. (Deze 2 weken goed) de 3e detecteert de mousehover over de label wel goed, maar nu wil ik graag dat de background van de dynamisch gemaakte picturebox veranderd. Ik weet hier geen raad mee hoe ik dit zou kunnen veroorloven. Hier is de code:
Code:
            AddHandler newpic.MouseHover, AddressOf pich
            AddHandler newpic.MouseLeave, AddressOf picl
            AddHandler newlabel.MouseHover, AddressOf Labh

Code:
    Private Sub pich(sender As Object, e As EventArgs)
        Dim picture As PictureBox = DirectCast(sender, PictureBox)
        picture.BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld2.png")

    End Sub

    Private Sub picl(sender As Object, e As EventArgs)
        Dim picture As PictureBox = DirectCast(sender, PictureBox)
        picture.BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld.png")

    End Sub

    Private Sub Labh(sender As Object, e As EventArgs)
        Dim label As Label = DirectCast(sender, Label)

    End Sub

Dus voor de duidelijkheid:
Ik zou graag willen weten hoe ik in de sub:Labh de dynamische picturebox (die ook wordt verandert in picl en pich) van achtergrond kan veranderen.

Ik hoop dat 1 van jullie mij hierbij kan helpen!

Mvg F1s1ck
 
Hoi,

Als je de "Dim newpic" buiten alle sub's zet (maar binnen de class) dan kan je hem in alle sub's binnen die class aanroepen.

Dan kan je dus in de sub "Labh" gewoon dit doen:
Code:
newpic.BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld.png")

MartinJM

[edit]
PS: Welkom op Helpmij.nl! :)
[/edit]
 
Laatst bewerkt:
Hallo,

Nu heb ik het probleem dat hij maximaal 1 dynamische picturebox / label aanmaakt, terwijl dit door een document bepaalt wordt hoeveel hij er moet aanmaken.

Bryan
 
Mag ik je dan vragen hoe je bepaalt welke picturebox aangepast moet worden door welk label? Of wil je dat alle pictureboxen aangepast worden?
 
wat ik graag zou willen is dat hij per picturebox changet, dus niet alles tegelijk. Maar ik weet dus eigenlijk niet of dat op deze manier werkt. ik geef de pictureboxes en labels wel een naam om hem eruit te kunnen lezen.
 
Maak een class aan waarin je beide (picturebox en label) opslaat. maak vervolgens een array/list van dit object. Vervolgens kun je met behulp van "sender" en de naam van het element door je lijst lopen en de juiste label/picturebox erbij zoeken.

Hier beneden de code die ik voor een andere vraag heb gebruikt, waar je kunt zien wat ik bedoel (dit gaat om een statisch array van 7x6 knoppen, maar dynamisch array/list is hetzelfde:
Code:
    Dim buttons(6, 5) As Button

        For i As Long = 0 To 6
            For j As Long = 0 To 5
                Me.buttons(i, j) = New Button()
                Me.buttons(i, j).Size = New Drawing.Size(30, 20)
                Me.buttons(i, j).Location = New Point(10 + i * 31, 55 + 21 * j)
                Me.buttons(i, j).FlatStyle = FlatStyle.Popup
                Me.buttons(i, j).BackColor = CC
                Me.buttons(i, j).ForeColor = FC
                Me.buttons(i, j).Name = i.ToString + j.ToString
                AddHandler Me.buttons(i, j).Click, AddressOf Me.dateclicked
                Me.cp.Controls.Add(Me.buttons(i, j))
            Next j
        Next i
 
    End Sub
 
    Sub dateclicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
       
        Me.RV = DateAndTime.DateSerial(Dyear, Dmonth, Val(CType(sender, Button).Text)) 'set the selected date
        cp.DialogResult = DialogResult.OK 'close the form and allow program to go forward
    End Sub
 
Ik heb nu deze code in gebruik, Voor de label en picturebox.
Code:
        Dim f2 As New System.Drawing.Font("SketchFlow Print", 10)
        Dim lines As String = IO.File.ReadAllLines(My.Computer.FileSystem.SpecialDirectories.ProgramFiles + "\Vote\series.dll").Count
        Dim buttons(1, 9999999) As PictureBox
        For i As Long = 0 To 0
            For j As Long = 0 To lines - 1
                buttons(i, j) = New PictureBox()
                buttons(i, j).Visible = True
                buttons(i, j).BringToFront()
                buttons(i, j).Parent = Votes
                buttons(i, j).Width = 277
                buttons(i, j).Location = New Point(0, height2)
                buttons(i, j).BackColor = Color.Transparent
                buttons(i, j).Name = i.ToString + j.ToString + "pic"
                buttons(i, j).BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld.png")
                buttons(i, j).BackgroundImageLayout = ImageLayout.Stretch
                AddHandler buttons(i, j).MouseHover, AddressOf pictureboxhover
                AddHandler buttons(i, j).MouseLeave, AddressOf pictureboxleave
                AddHandler buttons(i, j).MouseClick, AddressOf pictureboxclick
                height2 += 50
                count += 1
            Next j
        Next i
        Dim labels2(1, 9999999) As Label

        For i2 As Long = 0 To 0
            For j2 As Long = 0 To lines - 1
                labels2(i2, j2) = New Label()
                labels2(i2, j2).font = f2
                labels2(i2, j2).visible = True
                labels2(i2, j2).width = 266
                labels2(i2, j2).parent = buttons(i2, j2)
                labels2(i2, j2).location = New Point(5, 12.5)
                labels2(i2, j2).backcolor = Color.Transparent
                labels2(i2, j2).Name = i2.ToString + j2.ToString
                labels2(i2, j2).text = "Hier komt de regel line"
                AddHandler labels2(i2, j2).MouseHover, AddressOf labelhover
            Next j2
        Next i2

Het probleem echter nog steeds is, Ik detecteer de mousehover over de label. Alleen nu wil ik dat hij de parent van de label (Dat is de onderliggende picturebox) van backgroundimage changet.
 
Je neemt het nu wel heel letterlijk over, maar probeer eens in je labelhover:

Code:
messagebox.show(CType(sender, Label).name)

Je gebruikt nu 2 arrays met enorme reserveringen. Daar kun je beter een "List" voor gebruiken. Bovendien kun je ook beide in een enkel object stoppen en die in de list doen. zodoende blijven label en image dan logisch bij elkaar
 
Ik kom er nog steeds niet uit hoe ik nou bij de mousehover van de label de dynamisch gemaakte picturebox background kan changen, Het aanmaken dat lukt allemaal wel.
Wat ik wil:
- Dynamisch worden er pictureboxes aangemaakt met allemaal een andere naam(Hoeveelheid wordt uitgelezen uit een document)
- Dynamisch worden er labels aangemaakt, Die krijgen de parent van de dynamisch gemaakte picturebox met dezelfde naam.
- Nu wil ik dat als ik met mijn muis over de dynamisch gemaakte label ga, Dat de dynamisch gemaakte picturebox de backgroundimage changed.

Code:
        For i As Long = 0 To 0
            For j As Long = 0 To lines - 1
                buttons(i, j) = New PictureBox()
                buttons(i, j).Visible = True
                buttons(i, j).BringToFront()
                buttons(i, j).Parent = Votes
                buttons(i, j).Width = 277
                buttons(i, j).Location = New Point(0, height2)
                buttons(i, j).BackColor = Color.Transparent
                buttons(i, j).Name = i.ToString + j.ToString + "pic"
                buttons(i, j).BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld.png")
                buttons(i, j).BackgroundImageLayout = ImageLayout.Stretch
                AddHandler buttons(i, j).MouseHover, AddressOf pictureboxhover
                AddHandler buttons(i, j).MouseLeave, AddressOf pictureboxleave
                AddHandler buttons(i, j).MouseClick, AddressOf pictureboxclick
                labels2(i, j) = New Label()
                labels2(i, j).Font = f2
                labels2(i, j).Visible = True
                labels2(i, j).Width = 266
                labels2(i, j).Parent = buttons(i, j)
                labels2(i, j).Location = New Point(5, 12.5)
                labels2(i, j).BackColor = Color.Transparent
                labels2(i, j).Name = i.ToString + j.ToString
                labels2(i, j).Text = "Hier komt de regel line"
                AddHandler labels2(i, j).MouseHover, AddressOf labelhover
                height2 += 50
                count += 1
            Next j
        Next i

    Private Sub pictureboxhover(sender As Object, e As EventArgs)
        Dim button As PictureBox = DirectCast(sender, PictureBox)
        button.BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld2.png")
    End Sub

    Private Sub pictureboxleave(sender As Object, e As EventArgs)
        Dim button As PictureBox = DirectCast(sender, PictureBox)
        button.BackgroundImage = System.Drawing.Bitmap.FromFile(My.Computer.FileSystem.SpecialDirectories.ProgramFiles & "\Vote\veld.png")
    End Sub

    Private Sub labelhover(sender As Object, e As EventArgs)
        Dim label2 As Label = DirectCast(sender, Label)
        'Val(CType(sender, Label).Name)

         [SIZE=4]Hier wil ik dus eigenlijk de picturebox (Dynamisch aangemaakt) kunnen laten veranderen van de backgroundimage[/SIZE]
    End Sub
 
Als beide dezelfde naam hebben kun je met de naam van "label" in je lijst met pictures de juiste vinden, dus (pseudocode):
Code:
naam = CType(sender, Label).Name
for i = 0 to buttons.length-1
   if buttons(i).name = naam then
      buttons(i).plaatje = mijn plaatje
   end if
next i

Dit is niet de exacte code, maar zo zou je de juiste picturebox kunnen vinden door de namen te vergelijken. Als je eenmaal de juiste hebt kun je verder programmeren zoals je normaal zou doen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan