REFORMULAR CAMPO [ô]TEXT[ô]
Sim, o TabIndex tá certinho... ao invés de voltar o foco do campo para o [ô]nome, matricula... etc[ô] que é a sequencia dos campos, ele tá voltando primeiro para o [ô]cep[ô], depois [ô]conta corrente[ô]... Muito estranho...
Eu testei aqui no VS2015 e realmente! Não que esteja desordenado, ele dá foco apenas no último campo vazio. Comigo ele vai invertidamente, do ultimo para o primeiro.
coloquei no loop um MessageBox com o Name dos controles. E adivinha... Me foi mostrado primeiro o último controle!
coloquei no loop um MessageBox com o Name dos controles. E adivinha... Me foi mostrado primeiro o último controle!
O que posso te sugerir agora é que ao inves de setar o focus, voce alterarse o background trocando a cor do controle que nao estiver preenchido
Puxa vida ACCIOLLY que pena então
Alguém mais aà tem alguma idéia? Fazer com que o For Each inverta a seleção?
Consegui no C# assim
criei um array de controles com a quantidade de posições iguais a quantidade de controles no form. Daà no primeiro for guardei todos os controles nesse array.
depois reverti todas as posições desse array, e no segundo for fiz aquilo que já viu anteriormente. Funfou direitinho! Agora é só dar um jeito de passar isso pro vb6
Control[] controles = new Control[this.Controls.Count];
for(int i = 0; i < controles.Length; i++)
{
controles[i] = this.Controls[i];
}
Array.Reverse(controles);
for(int i = 0; i < controles.Length; i++)
{
if(controles[i] is TextBox)
{
if (controles[i].Text == string.Empty)
{
MessageBox.Show([Ô]Preencher[Ô]);
controles[i].Focus();
break;
}
}
}
criei um array de controles com a quantidade de posições iguais a quantidade de controles no form. Daà no primeiro for guardei todos os controles nesse array.
depois reverti todas as posições desse array, e no segundo for fiz aquilo que já viu anteriormente. Funfou direitinho! Agora é só dar um jeito de passar isso pro vb6
Veja.
Public Function RotinaSalvar()
Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is TextBox Then
If controle.Text = [Ô][Ô] And controle.Tag <> [Ô]x[Ô] Then
controle.SetFocus
MsgBox (controle.Name)
End If
End If
Next
End Function
Private Sub Command3_Click()
RotinaSalvar
End Sub
Public Function RotinaSalvar()
Dim controle As Control
For Each controle In Me.Controls
If TypeOf controle Is TextBox Then
If controle.Text = [Ô][Ô] And controle.Tag <> [Ô]x[Ô] Then
controle.SetFocus
MsgBox (controle.Name)
End If
End If
Next
End Function
Private Sub Command3_Click()
RotinaSalvar
End Sub
Dim ArrayControles(Me.Controls.Count) As Control
Dim i As Integer
For i = 0 To Me.Controls.Count - 1
Set ArrayControles(i) = Me.Controls(i)
Next i
[ô]se mesmo assim não estiver na ordem procure uma função equivalente ao Array.Reverse do C# e coloque aqui
For i = 0 To Me.Controls.Count - 1
If TypeOf ArrayControles(i) Is TextBox Then
If ArrayControles(i).Text = [Ô][Ô] And Controle.Tag <> [Ô]x[Ô] Then
MsgBox [Ô]Preencha todos os campos obrigatórios[Ô]
ArrayControles(i).SetFocus
Exit Sub
End If
End If
Next i
Bom vai minha sugestão.... Eu faço como abaixo:
Private Function vazio(Formulario As Form, ByRef extControle As Object) As Boolean
Dim Controle As Object
On Error Resume Next
vazio = False
For Each Controle In Formulario.Controls
If Controle.Tag = [Ô]Data[Ô] Or Controle.Tag = [Ô]Data1[Ô] Or Controle.Tag = [Ô]Vr[Ô] Then
If Trim(Controle.Text) = [Ô][Ô] Then
If Err.Number = 0 Then
vazio = True
Controle.BackColor = RGB(250, 250, 194)
End If
Set extControle = Controle
Else
If Controle.BackColor = RGB(250, 250, 194) Then
Controle.BackColor = QBColor(15)
End If
End If
End If
Next Controle
End Function [ô]
No Botão GRAVAR:
Dim Controle As Object
If vazio(Me, Controle) = True Then
MsgBox [Ô]Os campos salientados deverão ser preenchidos corrretamente, não podem haver campos nulos.[Ô]
Controle.SetFocus
Exit Sub
End If
é só adaptar para seu objetivo.
Use os TAG pra diferenciar os controles.
Private Function vazio(Formulario As Form, ByRef extControle As Object) As Boolean
Dim Controle As Object
On Error Resume Next
vazio = False
For Each Controle In Formulario.Controls
If Controle.Tag = [Ô]Data[Ô] Or Controle.Tag = [Ô]Data1[Ô] Or Controle.Tag = [Ô]Vr[Ô] Then
If Trim(Controle.Text) = [Ô][Ô] Then
If Err.Number = 0 Then
vazio = True
Controle.BackColor = RGB(250, 250, 194)
End If
Set extControle = Controle
Else
If Controle.BackColor = RGB(250, 250, 194) Then
Controle.BackColor = QBColor(15)
End If
End If
End If
Next Controle
End Function [ô]
No Botão GRAVAR:
Dim Controle As Object
If vazio(Me, Controle) = True Then
MsgBox [Ô]Os campos salientados deverão ser preenchidos corrretamente, não podem haver campos nulos.[Ô]
Controle.SetFocus
Exit Sub
End If
é só adaptar para seu objetivo.
Use os TAG pra diferenciar os controles.
Bom dia MILTONSILVA,
alguma das sugestões acima deu certo?
alguma das sugestões acima deu certo?
Tópico encerrado , respostas não são mais permitidas