Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Detectar Alterações no Form


VB6DeveloperJr

Pergunta

Boa Tarde,

Estou com um problema, gostária de fazer uma função parecida com a do Word, Notepad:

Quando o formulário é fechado o sistema verifica se algum campo foi alterado e abre uma mensagem para saber se o usuário pretende mesmo fechar sem salvar, caso nada tenha sido alterado o Formulario é fechado sem mensagem alguma.

Eu encontrei uma forma, criando uma variavel Booleana pública, e em todo evento Change dos TextBox, ComboBox e CheckBox, a variavel recebia Tue, sendo assim no momento de fechar o Form é feito uma verificação dessa variavel.

Porém creio eu q exista outra maneira de se obter o mesmo resultado sem precisar abrir o evento Change de mais de 20 controles do Formulario.

Caso alguém saiba, favor me ajudar!!!

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Boa Tarde,

Estou com um problema, gostária de fazer uma função parecida com a do Word, Notepad:

Quando o formulário é fechado o sistema verifica se algum campo foi alterado e abre uma mensagem para saber se o usuário pretende mesmo fechar sem salvar, caso nada tenha sido alterado o Formulario é fechado sem mensagem alguma.

Eu encontrei uma forma, criando uma variavel Booleana pública, e em todo evento Change dos TextBox, ComboBox e CheckBox, a variavel recebia Tue, sendo assim no momento de fechar o Form é feito uma verificação dessa variavel.

Porém creio eu q exista outra maneira de se obter o mesmo resultado sem precisar abrir o evento Change de mais de 20 controles do Formulario.

Caso alguém saiba, favor me ajudar!!!

Se alguém souber vai ajudar mais gente em ...eu tmb preciso de algo parecido com isso..

Link para o comentário
Compartilhar em outros sites

  • 0

é, isso ai é uma coisa q eu tb ainda não encontrei uma solucao perfeita.

se fosse .net você fazia isso facil.

mas o melhor modo q pensei aqui seria você fazer um array de textbox (copie e cole o textbox, e quando ele pergunta se você quer criar o array, clique em sim). cada item do formulario q precisar dessa checagem seria um indice do array, ai você poderia usar uma unica sub pra testar o formulario todo.

so problema é q ai você deve ter mais dificuldade pra identificar cada campo, mas foi o modo mais facil q encontrei aqui.

outra solucao q pensei seria você ver pelo keydown no formulario, você pegaria o Me.ActiveControl, e ai você saberia se ele esta alterando algum textbox, mas nd impede de o cara usar o mouse pra editar (usando as opcoes copiar e colar por exemplo), mas não encontrei um modo de checar o clique em qualquer controle.

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, é uma boa idéia essa de criar Array, mas não é muito aconselhavel para o meu sistema porque pelo que parece o VB6 só aceita Index de array como Integer, daria mais trabalho para a manutenção, principalmente eu q uso interaçao com Banco de Dados, vamos ter que continuar procurando uma solução para isso!

Link para o comentário
Compartilhar em outros sites

  • 0

entendi. uma coisa q você pode fazer é declarar no codigo os textbox com os nomes q você quiser e depois apontar pros q tão no formulario como array.

imagino q o q você declarar no form o visual basic vai interpretar apenas como pontero para o textbox do formulario, então o uso de memoria não seria tão gde, então você não precisa se preocupar com isso.

tipo assim ó:

Dim x As TextBox, y As TextBox, z As TextBox
Private Sub Form_Load()
    Set x = Text1(0)
    Set y = Text1(1)
    Set z = Text1(2)
End Sub[/code]

ai se você for acessar as propriedades do textbox x, por exemplo, ele já aponta direto pro text de indice 0.

Link para o comentário
Compartilhar em outros sites

  • 0

Private Sub Form_Load()
    
    Dim txtNome As TextBox
    Dim txtRazaoSocial As TextBox
    Dim txtEndereco As TextBox
    
    Set txtNome = txtDadosPrincipais(0)
    Set txtRazaoSocial = txtDadosPrincipais(1)
    Set txtEndereco = txtDadosPrincipais(2)
    
End Sub

é uma boa ideia essa, mas no meu caso eu teria que usar essas variaveis como publica então, porque o TxtNome só existe dentro dessa Sub, caso eu queira mudar alguma propriedade dele teria que identifica-lo como o Array txtDadosPrincipais(0).

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi, andei testando essa forma de validação para alterações no Formulário utlizando arrays, porém tive certos problemas no momento de alterar a propriedade via código de determinados TextBox,

Por exemplo:

Option Explicit
Dim txtRazaoSocial As TextBox
Dim txtEndereco As TextBox
Dim txtFone As TextBox

Private Sub Form_Load()

    Set txtRazaoSocial = txtDadosPrincipais(0)
    Set txtEndereco = txtDadosPrincipais(1)
    Set txtFone = txtDadosPrincipais(2)
    
End Sub

Private Sub txtDadosPrincipais_KeyPress(Index As Integer, KeyAscii As Integer)
  
  
--> If txtFone  Then
        If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> vbKeyBack Then
          KeyAscii = 0
        End If
      End If
    
End Sub

Como eu faço para identificar qual index do array estou trabalhando? porque com essa sintaxe aparece erro!

Link para o comentário
Compartilhar em outros sites

  • 0

então, você ve pela propriedade Index. por exemplo:

Private Sub txtDadosPrincipais_KeyPress(Index As Integer, KeyAscii As Integer)
     If Index = 2 Then
        If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> vbKeyBack Then
          KeyAscii = 0
        End If
      End If
    
End Sub[/code] pois nessa linha você setou q o txtFone era o indice 2:
[code]Set txtFone = txtDadosPrincipais(2)

agora, se você tiver q fazer um if pra cada textbox e ai você achar q o codigo da sub for ficar muito gde e muito confuso, você pode separar em varias subs. ai por exemplo, no evento KeyPress principal, td o q você faria seria testar os indices e chamar a sub correspondente.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...