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

Listbox Com Opção Checkbox


Girréis

Pergunta

Boa tarde, amigos.

Gostaria de auxílio em relação a um programa que estou implementando e a situação é a seguinte:

No formulário (não consigo anexar o arquivo de imagem), tem uma listbox com opção de checkbox, e 3 botões; a idéia é que ao clicar nos item em que quero que imprima e depois clicar no botão prévia, que abrirá uma janela de visualização do que será impresso, portanto o botão Command1 é um pequeno teste que estou tentando fazer para que passa o parâmetro texto do listbox com a caixa selecionada, mas o erro que está dando é que só passa o parâmetro texto quando uma linha for selecionada, então não é isso que quero se seja feito.

Como faço para resolver este problema? Alguém têm uma sugestão?

Segue abaixo o código para análise.

Grato,

Girréis

Option Explicit
Dim vCodIdentificacaoSubsistema As Long
Dim vCod As String
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset

Private Sub cmdFechar_Click()

    Unload Me
    
End Sub

Private Sub Command1_Click()  -> [size="6"]AQUI ESTÁ O PROBLEMA[/size]
Dim temp, temp2 As String
Dim i As Integer

For i = 0 To ListaFornecedores.ListCount - 1
If ListaFornecedores.Selected(i) Then
temp2 = ListaFornecedores.Text
End If
Next

End Sub

'Dim vCodFornecedor As Long
Private Sub Form_KeyPress(KeyAscii As Integer)
    
    'Se a tecla Enter foi pressionada, passa o foco para o próximo controle na
    'seqüência de TabIndex:
    If KeyAscii = vbKeyReturn Then
        SendKeys "{Tab}"
        KeyAscii = 0
    End If
    
End Sub
Private Sub Form_Load()
Dim vCod2 As String
    
    'Centraliza o formulário na área de trabalho do MDI:
    Me.Left = (frmSistControle.ScaleWidth - Me.Width) / 2
    Me.Top = (frmSistControle.ScaleHeight - Me.Height) / 2
    
    'Screen.MousePointer = vbHourglass
    With cnnComando
        .ActiveConnection = cnnBancoSCS
        .CommandType = adCmdText
        'Monta o comando SELECT para selecionar o registro na tabela:
        .CommandText = "SELECT * FROM ConsultaSubsistemas ORDER BY identificacao;"
        Set rsSelecao = .Execute
    End With
    With rsSelecao
        If .BOF = False Then
        While Not .EOF
        vCod2 = rsSelecao("identificacao")
        ListaFornecedores.AddItem vCod2
        rsSelecao.MoveNext
        Wend
        Else
            MsgBox "Banco de dados vazio!!!", _
            vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
            Unload frmRelatFornecedores
        End If
    End With

End Sub

Private Sub ListaFornecedores_Click()
Dim temp As String

End Sub

Link para o comentário
Compartilhar em outros sites

20 respostass a esta questão

Posts Recomendados

  • 0
mas o erro que está dando é que só passa o parâmetro texto quando uma linha for selecionada, então não é isso que quero se seja feito.

o q você quer q seja feito então??

Como faço para resolver este problema? Alguém têm uma sugestão?

cara não consegui entender qual problema

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

quando selecionando um item check, ele fica marcado não é?

então no listbox usando a opção checkbox é idêntico ao checkbox, o problema é que se eu não quiser marcar a caixa e apenas selecionando a linha com o mouse ou botão da setas do teclado, ao clicar no botão "command" e começar a fazer a verificação selecionando no código para apertar o F8, você verá que a variável temp2 está com a informção da última linha selecionada e não os que estão marcados.

será que consegui explicar.

girreis

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

não sei qual o erro, mas irei postar.....

mas engraçado o uso do select apenas seleciona a linha, mas como faço para desabilitar a seleção da linha e apenas habilitar as caixas de verificação para que eu possa marcar as caixas que preciso?

Girréis

Kuroi,

qual é o seu e-mail para que possa te mandar o arquivo do formulário em questão.

Girréis.

Kuroi,

dei uma verificada, não ficaria melhor usando o Listview com checkbox?

não sei usar esta função, me ajuda? voce tem algum exemplo disso ou apostila?

valeu,

Girreis

Link para o comentário
Compartilhar em outros sites

  • 0

a selecao da linha não significa q o item teja selecionado, é so pro cara poder mexer com o teclado, o item so é considerado selecionado quando você clica no checkbox.

não tem segredo nenhum, usar com checkbox é exatamente igual a usar sem.

se quiser me manda em rafaelsposito[a]gmail.com

Link para o comentário
Compartilhar em outros sites

  • 0

ou assim fica dificil de saber, manda o seu projeto, ou pelo menos o .frm do seu form, assim não da pra testar.

mas explica exatamente o q esta errado, o q você queria q acontecesse q não esta acontecendo??

acho q você quer selecionar varias opcoes ao mesmo tempo, mas no final ele só seleciona a ultima, não é isso?? se for o problema é q o temp2 só vai guardar a ultima mesmo, você podia jogar num array, mas isso seria desnecessario depenendo do q você quer fazer, já q você poderia apenas percorrer o listbox e checar o q esteja selecionado.

mas explica melhor, o q você quer fazer com os itens q estejam selecionados?? ele vai abrir uma janela de visualizacao não é isso?? nessa janela como (qual o código) você seleciona os itens pelo listbox??

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

o que você postou, é exatamento o que está dando erro: o temp2 armazena o último dado selecionado pela linha e não na caixa de seleção.

acontece o que quero é que depois de finalizar a seleção dos itens, irei clicar em um botão que irá visualizar a impressão com os itens selecionados.

não sei se esta função (o uso do listbox) permite isso, se não for poderia ser o listview, mas o problema é que não sei seu formato e como usar para se conectar ao banco de dados.

eu te mandei um e-mail para que você averigue, usando um banco de dados qualquer.

um abraço,

girreis

Link para o comentário
Compartilhar em outros sites

  • 0

da pra fazer com listbox sim, mas o problema é q eu não sei o q você quer fazer:

mas explica melhor, o q você quer fazer com os itens q estejam selecionados?? ele vai abrir uma janela de visualizacao não é isso?? nessa janela como (qual o código) você seleciona os itens pelo listbox??

você quer tipo montar um select no banco de dados?? se for dentro daquele mesmo for onde você punha o valor no temp2, em vez de por o valor no temp2, monte a string separando os valores por OR.

sei la, vai depender do q você vai fazer com os valores, explica melhor ai.

se você me mandou otro email, não chegou. o unico email q tenho seu é um q chegou meio dia.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

consegui fazer com listview, segue abaixo o código, ok?

uma pergunta: estou tentando implementar no botão prévia (cmdprevia_click) que ao clicar ele lista num msgbox os itens que foram clicados, mas não está dando certo, poderia me ajudar?

segue o código:

Option Explicit
Dim vCodIdentificacaoSubsistema As Long
Dim vCod As String
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
Dim i As Integer

Private Sub cmdFechar_Click()

    Unload Me
    
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    
    'Se a tecla Enter foi pressionada, passa o foco para o 

próximo controle na
    'seqüência de TabIndex:
    If KeyAscii = vbKeyReturn Then
        SendKeys "{Tab}"
        KeyAscii = 0
    End If
    
End Sub
Private Sub Form_Load()
Dim vCod2 As String
    
    'Centraliza o formulário na área de trabalho do MDI:
    Me.Left = (frmSistControle.ScaleWidth - Me.Width) / 2
    Me.Top = (frmSistControle.ScaleHeight - Me.Height) / 2
    
    'Screen.MousePointer = vbHourglass
    With cnnComando
        .ActiveConnection = cnnBancoSCS
       ' .CommandType = adCmdText
        'Monta o comando SELECT para selecionar o registro 

na tabela:
       ' .CommandText = "SELECT * FROM ConsultaSubsistemas 

ORDER BY identificacao;"
       ' Set rsSelecao = .Execute
    End With
    
    'carrega list
    CarregamentoListView
    Label1.Caption = ""

End Sub

Private Sub cmdPrevia_Click()
For i = 0 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Checked = True Then
        MsgBox "selecionado"
        Label1.Caption = "deu certo"
    End If
Next

End Sub
Public Sub CarregamentoListView()
Dim IdLst As ListItem
'Dim i As Integer

    'abre o recordset
    With cnnComando
        .ActiveConnection = cnnBancoSCS
        .CommandType = adCmdText
        'Monta o comando SELECT para selecionar o registro 

na tabela:
        .CommandText = "SELECT * FROM ConsultaSubsistemas 

ORDER BY identificacao;"
        Set rsSelecao = .Execute
    End With
    'limpa o listview
    ListView1.ColumnHeaders.Clear
    ListView1.ListItems.Clear
    'define se irá aparecer um checkbox para listar
    ListView1.Checkboxes = True
    'mostrar as linhas do grid
    ListView1.GridLines = True
    'define para selecionar a linha inteira
    ListView1.FullRowSelect = True
    'define o tipo de listview
    ListView1.View = lvwReport
    ListView1.ColumnHeaders.Add , , "", 300
    ListView1.ColumnHeaders.Add , , "Nome", 3000, 

lvwColumnCenter
    Do Until rsSelecao.EOF
        Set IdLst = ListView1.ListItems.Add(, , 

rsSelecao!identificacao)
        If Not IsNull(rsSelecao!identificacao) Then
            If Not IsNull(rsSelecao!identificacao) Then 

IdLst.SubItems(1) = rsSelecao!identificacao
        End If
        rsSelecao.MoveNext
    Loop
    'fecha o recordset
    rsSelecao.Close
    Set rsSelecao = Nothing
End Sub

o que achou? aqui deu certo, mas só falta aprender a exibir a mensagem com os itens que foram clicados!

será que você consegue me dar um help?

Valeu,

Girreis

Link para o comentário
Compartilhar em outros sites

  • 0

Cara vê se ajuda, quando queremos lançar o texto de algum controle em uma MSGBOX, ou em outro controle fazemos o seguinte:

digamos que quero que apareça na msgbox o nome do cliente que escolhi na text_clientes e o sexo do cliente que está na text_sexo

Private Sub Command1_Click()

Dim vdescricao As Integer

vdescricao = MsgBox("cliente selecionado :" & Text_clientes & " do sexo " & Text_sexo, vbOKOnly, "Informações")

End Sub

Beleza?, você pôe os textos entre aspas duplas " texto" e concatena com o operador "&" o valor do campo que quer que apareça.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, Macêdo!

deu certo, aprendi!

mas agora como implemento para que imprima os que foram selecionados?

grato,

Girreis

Macêdo,

ficou jóia, consegui implementar para imprimir conforme a filtragem.

segue o código abaixo:

Private Sub cmdPrevia_Click()
Dim vdescricao As Integer
For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Checked = True Then
        'MsgBox "selecionado"
        vdescricao = MsgBox("Itens selecionados: " & ListView1.ListItems(i), vbOKOnly, "informações")
        Label1.Caption = "deu certo"
        DataSubsistemas.rsCommand1.Filter = " IDENTIFICACAO like '" & ListView1.ListItems(i) & "'"
        DataReport1.Show

        
    End If
Next

End Sub

Acontece que se eu seleciono mais de um item, ele só apresenta a impressão do primeiro item selecionado!

como contorno isto? se quero que imprima apenas 2 itens, ele tem que visualizar 2 itens antes de imprimir, tem como resolver isto?

Grato,

Girreis

Alguém pode me auxiliar?

como devo proceder?

Girreis

Link para o comentário
Compartilhar em outros sites

  • 0

alguns posts acima, já expliquei como faz (q alias, seria igualzinho no ListBox), mas o código deve ser mais o menos assim:

Private Sub cmdPrevia_Click()
Dim vdescricao As Integer, filtro As String
For i = 1 To ListView1.ListItems.Count
    If ListView1.ListItems(i).Checked = True Then
        filtro = Iif(filtro <> "", " Or ", "") " IDENTIFICACAO like '" & ListView1.ListItems(i) & "'"
    End If
Next

DataSubsistemas.rsCommand1.Filter = filtro
DataReport1.Show

End Sub[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

então, tava olhando agora, teve um erro no meu codigo, faltou contatenar aqui, foi mal:

filtro = filtro & Iif(filtro <> "", " Or ", "") & " IDENTIFICACAO like '" & ListView1.ListItems(i) & "'"

mas, explicando a funcao IIf é meio q um if simplificado. na verdade o q ele faz é o seguinte, o primeiro parametro q você passa é uma expressao. se essa expressao for verdadeira, ele volta o segundo parametro q você passa, senao volta o terceiro.

ó, porque tipo assim, você vai fazer a string tipo assim: "IDENTIFICACAO like 'texto1' Or IDENTIFICACAO like 'texto2' Or IDENTIFICACAO like 'texto3'", certo??

ai o q acontece, eu tenho sempre q por um "Or" na frente de cada expressao, menos na primeria. ou seja, com o Iif eu faco o teste, se o filtro não estiver vazio (já escrevi coisa nele, ou seja, não é a primera vez) eu ponho um Or pra juntar com a proxima expressao, senao não coloco o Or.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Girréis

Ao invés de Private Sub cmdPrevia_Click() você poderia tentar o Private Sub (<<nome do controle>>)_ItemCheck(Item As Integer) e passar o valor Item como parametro.

Att.

Ricardo Nunes

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...