REFORMULAR CAMPO [ô]TEXT[ô]

MILTONSILVA94 17/03/2016 10:43:14
#459375
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...
ACCIOLLY 17/03/2016 12:01:59
#459379
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!
ACCIOLLY 17/03/2016 13:11:33
#459381
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
MILTONSILVA94 17/03/2016 13:19:23
#459383
Puxa vida ACCIOLLY que pena então
ACCIOLLY 17/03/2016 14:05:32
#459384
Alguém mais aí tem alguma idéia? Fazer com que o For Each inverta a seleção?
ACCIOLLY 17/03/2016 14:33:30
#459385
Consegui no C# assim

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
OMAR2011 17/03/2016 14:55:48
#459387
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
ACCIOLLY 17/03/2016 15:38:38
#459390
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
IRENKO 17/03/2016 17:22:11
#459396
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.

ACCIOLLY 18/03/2016 08:26:00
#459415
Bom dia MILTONSILVA,
alguma das sugestões acima deu certo?
Página 4 de 5 [48 registro(s)]
Tópico encerrado , respostas não são mais permitidas