Click here to Skip to main content
15,886,676 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi, Good day/night, First of all, excuse my bad english.. Well. I have the next problem...

I'm making a program where I can receive just one Message in a TextBox, and when I click the button or the textbox both must be removed, and then, the next messajes can go up in a AutoSlide Panel. Here is the whole code.. the last codebox is where I cant find the problem.. "How to use a button handler to make multiple controls created Dinamically to be closed". Thanks

VB
Imports System.Threading
Imports System.Net.Sockets
Imports System.IO
Imports System.Drawing

Public Class Form1
    Friend WithEvents NuevaOrden As TextBox
    Friend WithEvents OrdenLista As Button
    'Socket para la escucha de peticiones
    Private oInitSocket As TcpListener
    Public i As Integer = 1
    Private nMensajes As Integer



    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'Inicializamos el socket de escucha
        oInitSocket = New TcpListener(Net.IPAddress.Any, 60000)
        'Lo ponemos a la escucha
        oInitSocket.Start()
        Me.Timer1.Enabled = True
    End Sub
    Private Sub chequear()
        Me.Timer1.Enabled = False 'desactivamos el timer
        If oInitSocket.Pending = True Then 'Si hay conexiones pendientes
            Dim oClientSocket As Socket = oInitSocket.AcceptSocket() 'Tomamos la conexión
            Dim vDatos(255) As Byte
            oClientSocket.Receive(vDatos) 'Recibimos los datos. Límite de buffer: 256
            'Los traducimos a texto y los mostramos
            'MsgBox("Mensaje del cliente: " & vbCrLf & System.Text.Encoding.BigEndianUnicode.GetString(vDatos))
            NuevaOrden = New TextBox
            NuevaOrden.Name = "Orden" & i
            NuevaOrden.Parent = Me.PanelOrden
            NuevaOrden.Tag = i
            NuevaOrden.ReadOnly = True
            NuevaOrden.Width = 100
            NuevaOrden.Height = 50
            NuevaOrden.Multiline = True

            OrdenLista = New Button
            OrdenLista.Name = "OrdenLista" & i
            OrdenLista.Text = "OrdenLista" & i
            OrdenLista.Parent = Me.NuevaOrden
            OrdenLista.Tag = i
            'OrdenLista.Location = New Point(NuevaOrden.Height - OrdenLista.Height, NuevaOrden.Width - OrdenLista.Width)
            AddHandler OrdenLista.Click, AddressOf Me.OrdenLista_Click
            NuevaOrden.Text &= vbCrLf & "Orden nº " & i & ": " & _
                                System.Text.Encoding.BigEndianUnicode.GetString(vDatos) 'Llenamos el TextBox y lo decodificamos
            PanelOrden.Controls.Add(NuevaOrden)
            NuevaOrden.Controls.Add(OrdenLista)
            oClientSocket.Disconnect(False) 'Desconectamos del cliente
            oClientSocket.Close() 'Cerramos el socket

            'Contamos un mensaje más recibido
            nMensajes += 1
            i += 1
        End If
        'volvemos a activar el timer 
        Me.Timer1.Enabled = True

    End Sub


    Private Sub btnCerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerrar.Click
        Dim condición As Integer
        condición = MsgBox("¿Desea salir?", vbYesNo)
        If condición = vbYes Then Me.Close() Else Exit Sub
        End
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        chequear()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub


    Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged

    End Sub

    Private Sub FlowLayoutPanel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PanelOrden.Paint

    End Sub


And here is my handler where I want the code to make both "button and TextBox" to be removed.

VB
 Private Sub OrdenLista_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim tag As String
        Dim tag2 As String
        'FlowLayoutPanel1.Controls.Remove()
        'FlowLayoutPanel1.Controls.RemoveByKey(CType(CType(sender, System.Windows.Forms.Button).Tag, String))
        'MsgBox("you have clicked button " & CType(CType(sender,  _
        'System.Windows.Forms.Button).Name, String))
        tag = DirectCast(sender, Button).Tag
        MsgBox(tag)
        tag2 = "NuevaOrden" & tag
        MsgBox("tag2: " & tag2)
        tag = "OrdenLista" & tag
        MsgBox("tag: " & tag)
        PanelOrden.Controls.RemoveByKey(tag2)
        PanelOrden.Controls.RemoveByKey(tag)

    End Sub
End Class
Posted

1 solution

Try:

Container.Controls(0).Visible = False
Container.Controls(0).Dispose


Or Else you can hide the controls and show them when required

XML
Container.Controls(0).Visible = False
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900