|
-
Oct 2nd, 2012, 09:37 PM
#1
Thread Starter
Member
Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
Ok super simple code and I hope an easy question to answer
I have a FLowLayoutPanel and in it generating a few GroupBoxes and in them a few labels.
Works dandy by itself when called from say a Form1_Load
But when I load the TestBox() sub from a timer, it keeps loading the same x groupboxes over and over
what am I missing?
FlowLayoutPanel1.Controls.Remove(gbNew) either doesn't do squat or completely blanks the panel depending on where I put it, so that isn't a solution.
I don't seem to have the issue when I do the loop without a FlowLayoutPanel so it seems something inherent to that control 
Code is below
Code:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub TestBox()
Dim gbCount As Integer = 5
Dim I As Integer
For I = 0 To gbCount
Dim gbNew As New GroupBox()
Dim wlbNew As New Label()
'FlowLayoutPanel1.Controls.Remove(gbNew) ' doesn't do squat here and totally blanks before next
FlowLayoutPanel1.Controls.Add(gbNew)
gbNew.Controls.Add(wlbNew)
wlbNew.Text = "Boogers"
wlbNew.Visible = True
wlbNew.Location = New System.Drawing.Point(230, 34)
wlbNew.Font = New Font(wlbNew.Font.FontFamily, 6.5)
wlbNew.BackColor = Color.Transparent
gbNew.Size = New System.Drawing.Size(270, 80)
'gbNew.BackColor = System.Drawing.Color.Silver
gbNew.Visible = True
gbNew.Text = "Tis ME" & " " & I
Next
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
TestBox()
End Sub
End Class
Any assistance, long as it's VB and not another language I know even less, would be greatly appreciated.
TIA
-
Oct 2nd, 2012, 09:58 PM
#2
Re: Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
Look at this code:
Code:
Dim gbNew As New GroupBox()
Dim wlbNew As New Label()
'FlowLayoutPanel1.Controls.Remove(gbNew)
Why would you expect that third line to do anything useful? 'gbNew' refers to a new GroupBox that you created moments before and haven't even added to the FlowLayoutPanel. Think of it like this: you are making a cake and putting it in the oven, then an hour later you are making another cake. Can you remove that second cake from the oven? Of course not, because you haven't even put it in the oven yet. Would trying to remove the new cake somehow magically remove the cake that is already in the oven? Of course not, because it's a different cake. If you only want one cake in the oven at a time then obviously you have to remove the cake you made first from the oven, then you can put the new cake in. If you want to remove the GroupBox that you created last time then that's the one you have to remove, not the one you just created this time.
That said, does it really make sense to remove all the controls you already created? Maybe it does but it would be more efficient to re-use them if possible.
-
Oct 2nd, 2012, 10:30 PM
#3
Thread Starter
Member
Re: Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
 Originally Posted by jmcilhinney
Look at this code:
Code:
Dim gbNew As New GroupBox()
Dim wlbNew As New Label()
'FlowLayoutPanel1.Controls.Remove(gbNew)
Why would you expect that third line to do anything useful? 'gbNew' refers to a new GroupBox that you created moments before and haven't even added to the FlowLayoutPanel. Think of it like this: you are making a cake and putting it in the oven, then an hour later you are making another cake. Can you remove that second cake from the oven? Of course not, because you haven't even put it in the oven yet. Would trying to remove the new cake somehow magically remove the cake that is already in the oven? Of course not, because it's a different cake. If you only want one cake in the oven at a time then obviously you have to remove the cake you made first from the oven, then you can put the new cake in. If you want to remove the GroupBox that you created last time then that's the one you have to remove, not the one you just created this time.
That said, does it really make sense to remove all the controls you already created? Maybe it does but it would be more efficient to re-use them if possible.
Thanks for replying. I kinda get what you're saying but I don't what I need to remove. I have a FAR more complex version that is pulling info from my sql db and I need to refresh the info every second or two, which is why I have it in the loop.
The # of boxes is dynamic as is the data I need to display in said boxes. So what would I need to put in that code above to either refresh the data within the controls or just redraw the controls by first removing the 1st cake so I can bake the 2nd? since I only want one cake in the oven at a time?
-
Oct 2nd, 2012, 11:03 PM
#4
Re: Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
Do you want to remove everything from the FLP? If so then just call the Clear method of its Controls collection.
The issue with that is that it won't dispose them, which good practice dictates that you do. You should either recursively visit each control and dispose it or else store all the controls in another list that you can enumerate and dispose each item.
If you need to access a control in the FLP's Controls collection in order to remove it and the only reference to it is in the Controls collection then you have to access it via the Controls collection.
-
Oct 2nd, 2012, 11:47 PM
#5
Thread Starter
Member
Re: Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
I tried using FlowLayoutPanel1.Controls.Clear() and while it did work, it was really ugly. It basically flashes the screen on each redraw and even when double buffered. Not good IS there a way I can create the dynamic layout as a static screen and just update the info being shown on it?
-
Nov 18th, 2014, 06:46 PM
#6
New Member
Re: Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
Hello,
Im new here, and I have exactly same problems like thequestor had. Is any elegant way to implement such control, where you can dynamicaly add other control in it. I'm using FlowLayoutPanel, like thequestor did , and I'm adding other control in ths panel in a method, which is triggered by timer. IS working good, but problem is that is blinking. Do you hav eeny idea , how to make such things?
thequestor, are you still alive? how u made this task?
thanks
-
Nov 18th, 2014, 07:51 PM
#7
Thread Starter
Member
Re: Stop FLowLayoutPanel from repeat loading dynamic controls within a timer
 Originally Posted by martin.kavcic
Hello,
Im new here, and I have exactly same problems like thequestor had. Is any elegant way to implement such control, where you can dynamicaly add other control in it. I'm using FlowLayoutPanel, like thequestor did , and I'm adding other control in ths panel in a method, which is triggered by timer. IS working good, but problem is that is blinking. Do you hav eeny idea , how to make such things?
thequestor, are you still alive?  how u made this task?
thanks
I wish I could answer this as it was over 2 years ago and my brain only holds thoughts for about 30 seconds I think I gave up and went a different route.
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|