Link to home
Start Free TrialLog in
Avatar of jj_30
jj_30

asked on

Simple question about PictureBoxes

:  Ok, well, I have a trial subscription, but I googled a bunch on this, and nothing that I found worked. Perhaps the experts exchange model is the best for solutions, as required by the workplace.

I am dynamically adding buttons to an inherited form class (the class inherits "form", is maximized, has a background and a picturebox on it to make it look nice ... as simple as it gets).... anyway, I am dynamically adding buttons, and the buttons always show behind the picturebox, even as I use bringToFront, and even if I do this AFTER adding to the control array (after me.controls.add).

I think I'm missing something very fundamental here, but I didn't plan on spending three hours trying to get a label on top of a picturebox, so I'm asking for help.

Thanks
Avatar of jj_30
jj_30

ASKER

I cant see my code and it's making me thing that it's missing. Here it is...

Public Class Main 
    Private Sub FormSpecific()
        Me.lblPassword.Parent = Me.picField
        Me.lblPassword.Location = New Point(10, 4)  'relative positioning to the parent
        Me.lblPassword.BringToFront()
        Me.lblPassword.BackColor = Color.Transparent
        Me.picField.BackColor = Color.Transparent
        Me.picField.SendToBack()
 
        For i As Integer = 0 To Me.Controls.OfType(Of GlassButton).Count - 1
            Me.Controls.Item(i).BringToFront()
        Next
    End Sub
    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        FormSpecific()
 
        'Go to db, get users
        Dim objDataTable As New DataTable
        objDataTable = dbReader("SELECT * FROM TblUsers ORDER BY UserID")
 
        Me.KeyPreview = True
 
        'Dad, mom, etc. Now put some buttons on the main form.
        For i As Integer = 0 To objDataTable.Rows.Count - 1
            With objDataTable(i)
                'draw buttons
                Dim currButton As New GlassButton
                currButton.Text = objDataTable.Rows(i)(1)
                currButton.AvailableOption = IIf(.Item("UserEnabled") = 1, True, False)
 
                Dim currButtonLoc As New Point
                currButtonLoc.X = xStart
                currButtonLoc.Y = yStart + i * (currButton.Height + nButtonSpacing * 2) 'top and bottom margins nButtonSpacing ea.
                currButton.Location = currButtonLoc
 
                Me.Controls.Add(currButton)
            End With
        Next i
 
    End Sub
 
End Class

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of bmatumbura
bmatumbura

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Mike Tomlinson
This jumps out at me:

        For i As Integer = 0 To Me.Controls.OfType(Of GlassButton).Count - 1
            Me.Controls.Item(i).BringToFront()
        Next

The "i" value is simply going from 0 to Count -1...BUT the there is NO correlation between "i" and the corresponding returned controls position in the Items() collection:

            Me.Controls.Item(i).BringToFront() ' <----- it doesn't make sense to use "i" here

I think you actually wanted this:

        For Each gb As GlassButton In Me.Controls.OfType(Of GlassButton)()
            gb.BringToFront()
        Next

Avatar of jj_30

ASKER

Why, yes ...   it does help.

Thanks
Avatar of jj_30

ASKER

Hm, the OfType enumeration doesn't seem to work like I thought. It's linq-related.

me.controls.oftype(of GlassButton) returns something that's hard to parse.

It has <>3__source, <>7__wrapa5, etc. ... Perhaps a little advanced for me today.

Thanks for your help though!