• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 548
  • Last Modified:

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
0
jj_30
Asked:
jj_30
  • 3
1 Solution
 
jj_30Author Commented:
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

0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
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

0
 
jj_30Author Commented:
Why, yes ...   it does help.

Thanks
0
 
jj_30Author Commented:
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!
0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now