LISTVIEW - COLUNA COM CHECKBOX
então cara, o listview não tem [Ô]Celulas[Ô] nas colunas, é somente uma linha, o artificio que é realizado que pegar a posição clicada a partir do evento. e compara-lo pelo somatório do tamanho das colunas.
então, a lógica é:
1a coluna
ListView1.Columns(0).Width
2a coluna
ListView1.Columns(0).Width + ListView1.Columns(1).Width
3a coluna
ListView1.Columns(0).Width + ListView1.Columns(1).Width + ListView1.Columns(2).Width
e por ai vai
Private Sub ListView1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDoubleClick
If (e.X > [txt-color=#0000f0](ListView1.Columns(1).Width + ListView1.Columns(2).Width)[/txt-color]) Then [ô]pega a coluna clicada
If (ListView1.SelectedItems(0).SubItems(2).Text = [Ô]P[Ô]) Then
ListView1.SelectedItems(0).SubItems(2).Text = [Ô][Ô]
Else
ListView1.SelectedItems(0).SubItems(2).Text = [Ô]P[Ô]
End If
End If
End Sub
então, a lógica é:
1a coluna
ListView1.Columns(0).Width
2a coluna
ListView1.Columns(0).Width + ListView1.Columns(1).Width
3a coluna
ListView1.Columns(0).Width + ListView1.Columns(1).Width + ListView1.Columns(2).Width
e por ai vai
Entendi agora
Obrigado pela dica
Obrigado pela dica
CLEVERTON, segui o que você propôs acima mas não deu certo, será que você poderia olhar o que estou fazendo de errado, pois quando clico na coluna 3 ele marca a coluna 2, se clico na coluna 2 ele continua a marcar a coluna 3, ou seja, não está marcando a coluna 2 e 3 como eu queria.
Abaixo está a SUB que fiz
Private Sub ListView2_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView2.MouseClick
[ô]If (e.X > (ListView1.Columns(1).Width + ListView1.Columns(2).Width)) Then [ô]pega a coluna clicada
If (e.X > (ListView2.Columns(1).Width + ListView2.Columns(2).Width + ListView2.Columns(3).Width)) Then [ô]pega a coluna clicada
If (ListView2.SelectedItems(0).SubItems(3).Text = [Ô]X[Ô]) Then
ListView2.SelectedItems(0).SubItems(3).Text = [Ô][Ô]
Else
ListView2.SelectedItems(0).SubItems(3).Text = [Ô]X[Ô]
End If
Else
If (e.X > (ListView2.Columns(1).Width + ListView2.Columns(2).Width)) Then
If (ListView2.SelectedItems(0).SubItems(2).Text = [Ô]X[Ô]) Then
ListView2.SelectedItems(0).SubItems(2).Text = [Ô][Ô]
Else
ListView2.SelectedItems(0).SubItems(2).Text = [Ô]X[Ô]
End If
End If
End If
End Sub
Obrigado
Abaixo está a SUB que fiz
Private Sub ListView2_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView2.MouseClick
[ô]If (e.X > (ListView1.Columns(1).Width + ListView1.Columns(2).Width)) Then [ô]pega a coluna clicada
If (e.X > (ListView2.Columns(1).Width + ListView2.Columns(2).Width + ListView2.Columns(3).Width)) Then [ô]pega a coluna clicada
If (ListView2.SelectedItems(0).SubItems(3).Text = [Ô]X[Ô]) Then
ListView2.SelectedItems(0).SubItems(3).Text = [Ô][Ô]
Else
ListView2.SelectedItems(0).SubItems(3).Text = [Ô]X[Ô]
End If
Else
If (e.X > (ListView2.Columns(1).Width + ListView2.Columns(2).Width)) Then
If (ListView2.SelectedItems(0).SubItems(2).Text = [Ô]X[Ô]) Then
ListView2.SelectedItems(0).SubItems(2).Text = [Ô][Ô]
Else
ListView2.SelectedItems(0).SubItems(2).Text = [Ô]X[Ô]
End If
End If
End If
End Sub
Obrigado
então cara, se vc usou meu código todo daria certo sim.
isso não existe em meu código
no meu código está escrito assim
utilizei a letra P. usando a fonte [Ô]Wingdings 2[Ô] pra simular um efeito de checkagem.
posta um print pra eu ver como está seu form.
isso não existe em meu código
If (ListView2.SelectedItems(0).SubItems(2).Text = [Ô]X[Ô]) Then
no meu código está escrito assim
ListView1.SelectedItems(0).SubItems(2).Text = [Ô]P[Ô]
utilizei a letra P. usando a fonte [Ô]Wingdings 2[Ô] pra simular um efeito de checkagem.
posta um print pra eu ver como está seu form.
CLEVERTON - como você pode reparar foi somente alterado a letra [Ô]P[Ô] que voce colocou pelo [Ô]X[Ô], o restante continua do mesmo jeito que voce propos, mesmo assim não está dando o resultado que desejo.
Elmo
Elmo
Sinceramente você estão complicando uma coisa simples, o ListView já da recursos para detectar onde foi clicado, por exemplo, se você tem o item com 4 colunas e as duas ultimas (subitem 2 e 3) vão ser marcados ou desmarcados com X no clique ficaria assim:
As únicas coisa que precisam ser mudadas no ListView são o View que deve ser Details (o que é bem obvio para mostrar as colunas) e o FullRowSelect deve ser True, ou o evento não é disparado quando se clica nos subitems
Private Sub ListView1_MouseClick(sender As Object, e As MouseEventArgs) Handles ListView1.MouseClick
Dim ht As ListViewHitTestInfo = ListView1.HitTest(e.Location)
If ht.SubItem IsNot Nothing Then [ô]apenas para ter certeza que existe o subitem
Dim idx = ht.Item.SubItems.IndexOf(ht.SubItem) [ô]pega o indice do subitem clicado
If idx = 2 OrElse idx = 3 Then [ô]verifica se é uma das colunas que queremos tratar
If ht.SubItem.Text = [Ô]X[Ô] Then
ht.SubItem.Text = [Ô][Ô]
Else
ht.SubItem.Text = [Ô]X[Ô]
End If
End If
End If
End Sub
As únicas coisa que precisam ser mudadas no ListView são o View que deve ser Details (o que é bem obvio para mostrar as colunas) e o FullRowSelect deve ser True, ou o evento não é disparado quando se clica nos subitems
verdade OCELOT
o .Hitest é a forma mais adequada mesmo
o .Hitest é a forma mais adequada mesmo
Agradeço aos dois pelas dicas.
Muito obrigado,
Muito obrigado,
Elmo01, é essa linha mesmo
Olha cara, o resultado final deve ser igual a esta tela que estou postando...
me mostra um PRINT do seu form pra eu ver o que está saindo.
Lembre-se, a fonte deve ser mudada na coluna que será de checagem.
me mostra um PRINT do seu form pra eu ver o que está saindo.
Lembre-se, a fonte deve ser mudada na coluna que será de checagem.
Tópico encerrado , respostas não são mais permitidas