问题描述
晚安,晚安,首先,请原谅我糟糕的英语..好吧。我有下一个问题...
我正在创建一个程序,我只能在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
推荐答案
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添加控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!