Clear the Runtime-Created Controls from a Panel vb.net
I have a form. On that form is a Panel called pnlData.
I dynamicly create controls on the panel data during runtime.
When a textbox gets focus, I have a "Popup" panel display a numberpad so the user can enter numbers into the field. (no keyboard)
Here is a sample of the code that creates the 2nd panel...
Private Sub crtNumPad(ByVal sender As TextBox) Dim pnlData() As Control = Me.Controls.Find("pnlData", True) 'pnlData(0).SendToBack() Dim pnlNumPad As New Panel With pnlNumPad .Name = "plnNumPad" .Location = New System.Drawing.Point(sender.Location.X + 65, sender.Location.Y) .Size = New System.Drawing.Size(150, 200) .BackColor = Color.AliceBlue .Visible = True .BringToFront() End With pnlData(0).Controls.Add(pnlNumPad) pnlData(0).Controls.SetChildIndex(pnlNumPad, 0) Dim btnTemp1 As New Button With btnTemp1 .Name = "btnTemp1" .Location = New System.Drawing.Point(1, 1) .Size = New System.Drawing.Size(50, 50) .AutoSize = False .Text = "1" .BringToFront() End With pnlNumPad.Controls.Add(btnTemp1) ..... more code....End sub
When the user moves off of the field, I have the following subroutine..
Private Sub txtItemQty_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim pnlData() As Control = Me.Controls.Find("pnlData", True) For Each ctrl As Control In pnlData(0).Controls If ctrl.Name = "pnlNumPad" Then pnlData(0).Controls.Remove(ctrl) ctrl.Dispose() End If Next pnlData(0).Update() End Sub
call refresh() after removing the control pnlData(0).Refresh()
Mike Tomlinson
Why are you creating the "number pad" dynamically every time?
Just create it ONCE as a UserControl and store an instance of it in the Forms code. When you need it add it to your Panel at run-time and remove it as necessary. No need to dispose of it.
Is the panel added at design-time or run-time?
It appears that you are jumping thru hoops for no reason....
ScottParker
ASKER
nepaluz,
I tried that and it didn't work.
Idle_Mind,
I dont know how to do user controls.
The main panel pnlData is created at design-time but the controls on it are created during run-time.
Click on Project --> Add User Control, then add your Buttons and Code at DESIGN-Time. Now re-Build the project and your new UserControl should be at the TOP of your ToolBox where you can drag one onto your form.
"The main panel pnlData is created at design-time ..."
Then you do NOT need to Find() the panel with Controls.Find("pnlData", True). Just use its name like:
pnlData.Controls.Clear()
ScottParker
ASKER
Ok I built the User Control...
I am assuming that in the code for my original text boxes, in the Subroutine that I have hooked up to the "Enter" event, I will then set the location and visible property of this ucNumPad that I have already dropped on the screen (design time) and have hidden.
But how would you suggest that ucNumPad know which textbox it should be updateing?
Seem to be having a couple of other issues with the user control.
When I drag the user control from the toolbox and drop it on the form, it looks normal.
Then when i drag it over to pnlData, the user control increases in size.
Also,
I can not get it to show up. I suspect that the dynimic control that I put on the plnData at run-time are covering it up. I thought I moved it on to the plnData and I can see it there at design time, but when I do the following line of code,
pnlData(0).Refresh()