如何删除容器上的Dinamically添加控件 [英] How to Remove Dinamically added controls on a container

查看:82
本文介绍了如何删除容器上的Dinamically添加控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

晚安,晚安,首先,请原谅我糟糕的英语..好吧。我有下一个问题...



我正在创建一个程序,我只能在TextBox中收到一条消息,当我点击按钮或文本框时两者都必须删除,然后,下一个消息可以在AutoSlide面板中上升。这是整个代码..最后一个代码框是我无法找到问题的地方..如何使用按钮处理程序创建多个控件创建Dinamically关闭。谢谢



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

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





这是我的处理程序,我希望代码可以删除button和TextBox。





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

 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

推荐答案

尝试:



Try:

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





或者你可以隐藏控件并在需要时显示它们





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

Container.Controls(0).Visible = False


这篇关于如何删除容器上的Dinamically添加控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆