CONTROLE PAI
Colegas, sobre VB6 que ando enferrujado.
Tenho um form com 3 controles, sendo
1 frame
1 textbox
1 botão de comando
Tanto o textbox quanto o botão de comando estão dentro do frame.
No click do botão de comando, coloquei o código
com objetivo de pegar o nome do frame no qual o textbox está inserido. Mas [Ô]parent.name[Ô] traz o nome do formulário e não do frame.
Tem como pegar o nome do frame?
Grato, colegas.
Tenho um form com 3 controles, sendo
1 frame
1 textbox
1 botão de comando
Tanto o textbox quanto o botão de comando estão dentro do frame.
No click do botão de comando, coloquei o código
msgbox text1.parent.name
com objetivo de pegar o nome do frame no qual o textbox está inserido. Mas [Ô]parent.name[Ô] traz o nome do formulário e não do frame.
Tem como pegar o nome do frame?
Grato, colegas.
Colegas,
Com...
Eu consigo saber se o pai de Text1 é Frame1, mas se houver muitos frames no formulário, terei que avaliar um a um. Até ai sem problemas, porque posso colocar em um laço For Each. Mas ocorre que não bastará saber o nome, no caso Frame1, porque pode haver um array, teria que ser o Ãndice do Frame1 também, ou seja, Frame1(0). Mesmo que [Ô]Frame1[Ô] e o Ãndice [Ô]0[Ô] venham em variáveis separadas.
Alguma luz, colegas?
Com...
Public Declare Function GetParent Lib [Ô]user32[Ô] (ByVal hWnd As Long) As Long
Dim m_hWnd As Long
m_hWnd = GetParent(Text1.hWnd)
If m_hWnd = Frame1.hWnd Then
MsgBox ([Ô]sim[Ô])
Else
MsgBox ([Ô]nao[Ô])
End If
Eu consigo saber se o pai de Text1 é Frame1, mas se houver muitos frames no formulário, terei que avaliar um a um. Até ai sem problemas, porque posso colocar em um laço For Each. Mas ocorre que não bastará saber o nome, no caso Frame1, porque pode haver um array, teria que ser o Ãndice do Frame1 também, ou seja, Frame1(0). Mesmo que [Ô]Frame1[Ô] e o Ãndice [Ô]0[Ô] venham em variáveis separadas.
Alguma luz, colegas?
Colegas,
Consegui com o código abaixo. Mas antes de fechar o tópico, aguardarei mais algumas horas, para o caso de algum colega ter uma solução mais simples.
Tudo de bom a todos.
Consegui com o código abaixo. Mas antes de fechar o tópico, aguardarei mais algumas horas, para o caso de algum colega ter uma solução mais simples.
Dim m_hWnd As Long
Dim intContadorDeIndices As Integer
Dim intIndiceDoFramePai As Integer
Dim Controle As Control
[ô]Pegar o hWnd do controle
m_hWnd = GetParent(Text1.hWnd)
[ô]Procurar em todos os frames o nome e Ãndice do frame pai
For Each Controle In Me.Controls
[ô]Inicializa a variável (ficará -1 para o caso de o controle não ter um frame_scroll pai)
intIndiceDoFramePai = -1
[ô]Frame Scroll
If TypeOf Controle Is Frame Then
[ô]Fazer loop nos Ãndices
For intContadorDeIndices = Frame1.LBound To Frame1.UBound
[ô]Se coindicidir o hWnd
If m_hWnd = Frame1(intContadorDeIndices).hWnd Then
[ô]Armazenar qual o Ãndice do frame_scroll pai
intIndiceDoFramePai = intContadorDeIndices
[ô]Pode sair do for
GoTo AchouIndice
End If
Next intContadorDeIndices
End If
Next
AchouIndice:
[ô]Caso tenha achado um Ãndice de frame_scroll
If intIndiceDoFramePai >= 0 Then
MsgBox ([Ô]Frame [Ô] & intIndiceDoFramePai)
End If
Tudo de bom a todos.
Colegas,
A solução acima não funcionou.
Descobri que (ao menos olhando as propriedades depois do ponto) nem todos os controles possuem a propriedade hWnd (uso uma ocx chamada ActiveText).
O [Ô].parent[Ô] sempre retorna o nome do form. Queria que retornasse o nome do frame em que a text1 está dentro e o Ãndice do frame também porque tenho frame(0) até frame(x).
Alguma luz, colegas?
A solução acima não funcionou.
Descobri que (ao menos olhando as propriedades depois do ponto) nem todos os controles possuem a propriedade hWnd (uso uma ocx chamada ActiveText).
O [Ô].parent[Ô] sempre retorna o nome do form. Queria que retornasse o nome do frame em que a text1 está dentro e o Ãndice do frame também porque tenho frame(0) até frame(x).
Alguma luz, colegas?
Colegas,
A resposta é
.container.name
e
.container.index
A resposta é
.container.name
e
.container.index
Tópico encerrado , respostas não são mais permitidas