ALTERAR PROPRIEDADES DE UM USERCONTROL

THRON 11/05/2016 00:30:21
#461979
Boa noite!

Bom, eu criei um tópico uma vez, onde queria mudar as propriedades de um button, gerado através de códigos no FlayoutPanel.

Agora a duvida é a seguinte;

Criei um UserControl

Onde á uma Picturebox, uma label e um button.

no Formulário 1, gerou 2 UserControls seguindo os padrões acima.

Depois de gerado, no mesmo formulário, como faço para mudar o text da label ou name, tag e etc...

Para mudar um controle gerado no Flow, eu utilizo este codigo;

   Dim obj As Object

For Each controle In Form1.FlowLayoutPanel1.Controls
If controle.name = [Ô]Button1[Ô] Then
obj = controle
Exit For
End If
Next


obj.Text = [Ô]Texto alterado[Ô]
obj.Refresh


E se a Label estiver dentro de um user control?
THRON 11/05/2016 14:55:41
#461996
up...
DS2T 11/05/2016 15:39:04
#461999
Basta você criar uma propriedade no seu UserControl e no bloco Set da sua propriedade, indicar o valor para o Label.
THRON 11/05/2016 22:30:21
#462019
Não entendi muito bem
KERPLUNK 12/05/2016 01:15:49
#462022
Adicione uma propriedade no seu controle e no Set coloque o valor no label, assim:

Public Property ValorLabel() As String
Get
Return m_ValorLabel
End Get
Set
m_ValorLabel = Value
lblSUALABELAQUI.Text = Value
End Set
End Property
Private m_ValorLabel As String


Mas não vai adiantar absolutamente nada simplesmente copiar o código e colar no seu controle se você não entender o que é isso.
THRON 16/05/2016 15:24:10
#462134
é, eu não entendi muito bem
JABA 16/05/2016 16:32:53
#462142
Resposta escolhida
Para alterar, basta somente fazer o seguinte:

UserControl11.SeuLabel.Text = [Ô]Seu Texto[Ô]

Porém, se seu UserControl estiver dentro de um outro Container - creio que seja esse o seu problema - tu poderia fazer assim:

Dim label As Label = LocalizarControle([Ô]Label1[Ô], Form1.FlowLayoutPanel1) [ô]Coloque aqui o Container Principal
label.Text = [Ô]Seu texto[Ô]

Dim botao As Button = LocalizarControle([Ô]Button1[Ô], Form1.FlowLayoutPanel1)
botao.Text = [Ô]Seu Texto[Ô]

Public Function LocalizarControle(Nome As String, controle As Control) As Control
If controle.Controls.Count > 0 Then
For Each c As Control In controle.Controls
If c.Controls.Count = 0 Then
If c.Name = Nome Then Return c
Else
Return LocalizarControle(Nome, c)
End If
Next
End If
Return Nothing
End Function

THRON 16/05/2016 17:42:00
#462144
Más ai está apenas mudando o primeiro user control
JABA 16/05/2016 18:41:34
#462147
Se eles (os usercontrols) estiverem em containers diferentes, você terá que passar o Container de maior hierarquia para a função LocalizarControle().

Vamos supor que o seu UserControl esteja dentro do FlowLayoutPanel1, e que esse FlowLayoutPanel1 esteja dentro de um Panel1. Ou seja, temos um controle dentro de um container, que por sua vez está dentro de outro container. Sendo assim, você teria que passar o Panel1 como objeto, pois ele é o container que está no topo da hierarquia. Daí ficaria assim:

Dim label As Label = LocalizarControle([Ô]Label1[Ô], Panel1)

THRON 16/05/2016 19:23:39
#462154
No projeto, tem um FlowLayoutPanel1, e dentro do Flow tem 10 (ou mais) UserControls, e todos eles vão com o propriedade name da label como Label1, ou seja, [Ô]iria bugar[Ô] não iria!?
JABA 16/05/2016 19:46:17
#462155
Bom, se sua intenção é pegar todos os controles de mesmo nome, então faça assim:

  Dim lista As New List(Of Control)

LocalizarControle([Ô]Label1[Ô], lista, SeuContainerDeMaiorHierarquia)

For Each c As Control In lista
c.Text = [Ô]Seu Texto[Ô]
Next


    Public Sub LocalizarControle(Nome As String, saida As List(Of Control), controle As Control)
If controle.Controls.Count > 0 Then
For Each c As Control In controle.Controls
If c.Controls.Count = 0 Then
If c.Name = Nome Then saida.Add(c)
Else
LocalizarControle(Nome, saida, c)
End If
Next
End If
End Sub
Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas