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

Mshflexgrid


Gabriel Cabral

Pergunta

Oi minha gente.....

estou com um problema com cores em celulas do MSHFlexGrid quando faço uma busca dinamica....

Utilizo esse código para realizar a busca dinamica [indicado pelo grande Graymalkin]

Private Sub txtBuscaMSH_Change()

txtBuscaMSH.Text = UCase(txtBuscaMSH.Text)

achou = False
    Gride.Col = 2
    For i = 1 To Gride.Rows - 1
        If Gride.TextMatrix(i, 2) Like txtBuscaMSH & "*" Then
            Gride.Row = i
            Gride.TopRow = i
            Gride.CellBackColor = vbBlue
            Gride.CellForeColor = vbWhite
            achou = True
            Exit For
        End If
    Next i
    If Not achou Then
        txtBuscaMSH.BackColor = vbRed
        txtBuscaMSH.ForeColor = vbWhite
    Else
        txtBuscaMSH.BackColor = vbWhite
        txtBuscaMSH.ForeColor = vbBlack
    End If

End Sub

Surge então o problema...

suponhamos q na mshflexgrid tenho os nomes Daniel, Diego, Diogo, Douglas

se na textbox eu digito a letra d, a celula do Daniel fica em azul

mas se continuo digitando e digito diogo, as celulas do Daniel, do Diego e do Diogo ficam em azul...

axo q isso acontece porque nas textbox esta digitado o "D" do daniel o "Di" do Diego e o "Dio" do Diogo

tem como apenas uma celula por vez ficar em azul...???

assim....se eu digitar D, o daniel fica em azul...mas se depois do D vier um i o daniel fosse desmarcado porque ele não tem "Di" no nome

se tiver como, alguém me ajude por favor....

obrigado

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
A cada vez que você for colorir uma célula você tem que "descolorir" (ou seja, pintar de branco) todas as outras.

Abraços,

Graymalkin

Então Graymalkin...

eu fiz o que você indicou...

agora apenas um registro fica em azul...

o codigo ficou assim...

Private Sub txtBuscaMSH_Change()

achou = False
    Gride.Col = 2
    For i = 1 To Gride.Rows - 1
        If Gride.TextMatrix(i, 2) Like txtBuscaMSH & "*" Then
            If achou = False Then
                Gride.Row = i
                Gride.TopRow = i
                Gride.CellBackColor = vbBlue
                Gride.CellForeColor = vbWhite
                achou = True
            End If
        Else
            Gride.Row = i
            Gride.TopRow = i
            Gride.CellBackColor = vbWhite
            Gride.CellForeColor = vbBlack
        End If
    Next i

If achou = True Then
txtBuscaMSH.BackColor = vbWhite
txtBuscaMSH.ForeColor = vbBlack
Else
txtBuscaMSH.BackColor = vbRed
txtBuscaMSH.ForeColor = vbWhite
End If

End Sub

Mas surgiu um outro problema...

a cada letra digitada, a barra de rolamento percorre o MSHFlexGrid inteiro e pára la embaixo, no ultimo registro...

o registro digitado fica pintado em azul....mas não fica "em primeiro" na MSHFlexGride, de acordo com o TopRow...

o que deve estar errado???

obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
[quote name='Graymalkin' post='446783'

Mas surgiu um outro problema...

a cada letra digitada, a barra de rolamento percorre o MSHFlexGrid inteiro e pára la embaixo, no ultimo registro...

o registro digitado fica pintado em azul....mas não fica "em primeiro" na MSHFlexGride, de acordo com o TopRow...

o que deve estar errado???

Está faltando um Exit For no momento em que o registro é encontrado, não?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Está faltando um Exit For no momento em que o registro é encontrado, não?

Abraços,

Graymalkin

Estava mesmo Graymalkin..

eu o coloquei logo abaixo do

achou = True

Agora o registro encontrado está ficando no topo da gride...

mas ainda sim, a cada letra digitada, a barra de rolagem vai ate o inicio da gride...percorrendo desde o primeiro registro até o registro encontrado...

tem alguma forma da gride não ficar sendo percorrida do inicio até o registro encontrado a cada letra digitada???

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Você está colocando o código de busca no evento Change do Text, você teria que colocar em outro evento ou em algum botão por exemplo, dai a busca somente seria disparada quando se clicar no botão, depois de digitar todo o texto.

Mas daí não seria uma busca dinamica...

que é o que tenho que fazer

Link para o comentário
Compartilhar em outros sites

  • 0
Você está colocando o código de busca no evento Change do Text, você teria que colocar em outro evento ou em algum botão por exemplo, dai a busca somente seria disparada quando se clicar no botão, depois de digitar todo o texto.

Mas daí não seria uma busca dinamica...

que é o que tenho que fazer

Mas deixando o código de busca no evento change, sempre que digitado um novo caractere o código será executado.

A não ser que você crie algum critério pra execuçao da busca dentro do evento change, assim a busca só seria executada quando atender a essa condição.

If Condicao Then
  'Faz a busca
End If

Não sei se é isso que você precise, mas espero que ajude... :)

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...