Changing the layout order of vb.net controls - vb.net

I dynamically add picture boxes to a vb.net form. However, when I add the new picture box, it is always under/below/behind the picture boxes that I previously created. Is it possible to change it so that the newly created picture box would always be in front of the others?
Thanks

Just add this code to the part that creates the pictureboxes
PictureBox.BringToFront()

Dim mypic As PictureBox = New PictureBox
mypic.Height = 13
mypic.Width = 13
mypic.Left = 100
mypic.Top = 100
mypic.Visible = True
mypic.SizeMode = PictureBoxSizeMode.Normal
mypic.Parent = Me
mypic.Image = Image.FromFile("Path of the Image")
Me.Controls.Add(mypic)
mypic.bringtofront()

Related

vb.net winform picturebox in a tabcontrol getting error message when trying to load image

As per the title, have a picturebox in a tabcontrol.
I can load an image in a PictureBox if it is not a member of the tabcontrol but as soon as I add it to the tabcontrol I get an error in the design window
BC30456: 'FromFile" is not a member of tabpage
code is:
Me.PictureBox1.Image = image.FromFile("c:\tmp\01_front.png")
What am I doing wrong?
This is driving me crazy.
Stopped and did something else for 5 minutes and thought my way through the answer that I have been hamming at for 1hr.
Create the control and then add it to the tabcontrol. I was still thinking in the vb 6 way.
Dim test = New PictureBox
Dim tp = TabControl1.TabPages(3)
test.Name = "picture"
With test
.Location = New Point(tp.Location)
.Size = New Size(tp.Width, tp.Height)
.SizeMode = PictureBoxSizeMode.StretchImage
.Image = Drawing.Image.FromFile("c:\tmp\01.png")
.SendToBack()
End With
tp.Controls.Add(test)

Displaying images from a picturebox list

I am trying to display a line of pictures in my program. But I am having a problem, where it is only showing the first image in the imagelist and only showing one image-box.
Private Cards As New List(Of PictureBox)
Private Sub SetupCards()
For i As Integer = 0 To imglist1.Images.Count - 1
Dim PicCard As PictureBox = New PictureBox()
PicCard.Width = 100
PicCard.Height = 200
PicCard.Top = 50
PicCard.Left = 50
Me.Controls.Add(PicCard)
PicCard.Image = imglist1.Images(i)
Cards.Add(PicCard)
Next i
End Sub
You're placing the picture boxes on top of each other, which is why you only see the last card. You've got to set a different Left property for every picture box you add.
The solution is rather simple. Just add the picture box's width to Left, multiplied by the current index i.
PicCard.Left = 50 + PicCard.Width * i
Don't need to keep the imaging controls in your own list if you add them to a parent container control.
Use ListView or third-party controls, or use custom drawing code if you need to use ListBox (which wraps respective Windows control). See
C# Can I display images in a list box?

Order of controls being added to panel, control not showing unless docked

I imagine this is probably an easy to answer question but for some reason I can't get it to work
Sub New(ByVal Sess As AudioSessionControl2)
S_Session = Sess
'Create the panel and position it.
S_Panel.BackColor = Color.AliceBlue
S_Panel.Width = 200
S_Panel.Height = 40
Dim Position As New Point(6, 19)
If G_AppSessions.Count > 0 Then
Position = Point.Add(G_AppSessions.Item(G_AppSessions.Count - 1).SessionPanel.Location, New Point(0, 45))
End If
S_Panel.Location = Position
'Create a label which has the name of the process
Dim S_PName As New Label
S_PName.Text = "Test"
S_PName.Dock = DockStyle.Left
S_Panel.Controls.Add(S_PName)
'Create a button to change volume
Dim S_Save As New Button()
S_Save.Text = "Save"
AddHandler S_Save.Click, AddressOf Save_Click
S_Save.Parent = S_Panel
S_Panel.Controls.Add(S_Save)
S_Volume.Parent = S_Panel
S_PName.Parent = S_Panel
MainForm.Controls.Add(S_Panel)
S_Panel.Parent = MainForm.gb_Applications
End Sub
The problem is that, the label will show because its docked, but the button won't. It will only show if its docked as well, and thats just not what I want. This is part of a class for creating a dynamic UI, where I can create a number of this class to create a bunch of panels for various things.
I don't see anywhere where you are setting the label or button position. You probably have them both at 0,0 and the label is on top of the button, obscuring it. Did you try setting the position of both the controls, making sure they don't overlap?

Generate a new panel containing same check-boxes for each node in treeview VB.NET (Images Attached)

I want to generate a new panel with a click on each node in a treeview. But this each newly generated panel will have same check-boxes. In addition these check boxes are linked to groupboxes with a checked condition.
I can do this for 4-5 nodes by adding a panel for each node. But I have around 90 such nodes.
Kindly refer following images,
there are 90 such nodes.
Is there any easier way such as loop etc. to achieve this? or hard way (add panel for each node and use show/hide) is the only way?
Help will be really appreciated.
Cheers,
You can use a loop for this.
This is a sample:
First, you need to define some global variables:
Dim Panels(100) As Panel
Dim CheckBox1(100) As CheckBox
Dim CheckBox2(100) As CheckBox
Dim CheckBox3(100) As CheckBox
Dim Label1(100) As Label
Then, you should initialize controls on Form_Load() event:
For i As Integer = 0 To 100
'Initialize Controls
Panels(i) = New Panel()
CheckBox1(i) = New CheckBox()
CheckBox2(i) = New CheckBox()
CheckBox3(i) = New CheckBox()
Label1(i) = New Label()
'Set properties
CheckBox1.Left = 100
CheckBox2.Left = 100
CheckBox3.Left = 100
CheckBox1.Top = 100
CheckBox2.Top = 200
CheckBox3.Top = 300
Label1.Left = 100
Label1.Top = 50
Label1.Text = "ID : " & NodeNames(i) 'You should replace NodeNames(i) with a variable that you are using for the name of nodes.
'Add Controls to panel
Panels(i).Controls.Add(CheckBox1(i))
Panels(i).Controls.Add(CheckBox2(i))
Panels(i).Controls.Add(CheckBox3(i))
Panels(i).Controls.Add(Label1(i))
'Set visiblity of panel to false
Panels(i).Visible = False
'Add panel to the form.
Me.Controls.Add(Panels(i))
Next
And when you need to show a panel, you should do this:
Panels(i).BringToFront()
Panels(i).Visible = True
But having many panels in RAM is not such a good idea. I suggest you to use just one panel and modify it by code for each node. Because if you have many panels and many controls inside it, your application may use a large amount of RAM.

Dynamic PictureBox in Visual Basic

I've created a form with a PictureBox on it and would like to dynamically create another PictureBox on the form while the program runs (to the left of the static one). I've written this code:
Dim temp As PictureBox
temp = New PictureBox
temp.Image = StaticPictureBox.Image
temp.Visible = True
temp.Top = StaticPictureBox.Top
temp.Width = StaticPictureBox.Width
temp.Height = StaticPictureBox.Height
temp.Left = StaticPictureBox.Left - 20
temp.BringToFront()
When I run this code I can detect that the temp PictureBox does get created. However, it is not rendered onto the form. It seems like it's there but is invisible.
Does anyone have an idea of what I'm doing wrong?
You need to add it to the form's control collection:
Me.Controls.Add(temp)
Why don't you just remove that code and place a picturebox next to the other one and set:
newpicturebox.visible = false
Then whenever you have the action completed you have it change:
newpicturebox.visible = true
I know this is old but... you got an error here:
temp.Left = StaticPictureBox.Left - 20
should be:
temp.Left = StaticPictureBox.right + 20
or:
temp.Left = StaticPictureBox.right
hope it helped.