ADICIONAR EVENTO CLICK EM SUBITEM CONTEXTMENUSTRIP

FOXMAN 13/08/2010 19:01:53
#350213
Salve salve, pessoal.

Seguinte, no meu software em determinado momento eu crio um item(ToolStripMenuItem) NESTE CASO ITEM OCULTAR COLUNAS em um ContextMenuStrip.




e crio também subitens(subniveis) no item criado.

Até aí tudo bem.




Preciso adicionar a esses subitens um evento click, para que quando clicar(checkar) ocultar a coluna do listview.


No momento consigo adicionar evento click apenas no item , mas minha necessidade é o subnivel.

Não estou conseguindo pegar o evento click no subnivel do item.

O objeto é um ContextMenuStrip.

Abaixo segue o código de criação do item e subitem e o evento click do item.

Dim item As New ToolStripMenuItem([Ô]Ocultar Colunas[Ô])
For I = 0 To lstProdutosLancados.Columns.Count - 1
item.DropDownItems.Add(lstProdutosLancados.Columns.Item(I).Text)
CMProdutos.Items.Add(item)
[ô]AddHandler item.Click, New System.EventHandler(AddressOf Me.Item_Click)
Next


 Private Sub Item_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim tsmi As ToolStripMenuItem = TryCast(sender, ToolStripMenuItem)
Dim cms As ContextMenuStrip = TryCast(tsmi.Owner, ContextMenuStrip)
Dim ctrl As ListView = TryCast(cms.SourceControl, ListView)
If ctrl.SelectedItems.Count > 0 Then
MessageBox.Show(ctrl.Items(ctrl.SelectedIndices(0)).Text)
End If
End Sub


Dessa forma consigo pegar o valor do item selecionado no listview.

Com tudo isso o que desejo é :

Ocultar a coluna clicada no menuitem.

JWCELYO 13/08/2010 19:09:29
#350214
Fox Men serrar que você poderia me enviar um exemplo ?
FOXMAN 13/08/2010 19:29:53
#350216
é to quase conseguindo....

Agora quando clico no subitem pelo menos já da um erro....hehehehe

Alterei o seguinte :

Dim item As New ToolStripMenuItem([Ô]Ocultar Colunas[Ô])
For I = 0 To lstProdutosLancados.Columns.Count - 1
item.DropDownItems.Add(lstProdutosLancados.Columns.Item(I).Text)
CMProdutos.Items.Add(item)
[ô]AddHandler item.Click, New System.EventHandler(AddressOf Me.Item_Click)
Next


Para :

Dim item As New ToolStripMenuItem([Ô]Ocultar Colunas[Ô])
For I = 0 To lstProdutosLancados.Columns.Count - 1
item.DropDownItems.Add(lstProdutosLancados.Columns.Item(I).Text)
CMProdutos.Items.Add(item)
AddHandler item.DropDown.Click, New System.EventHandler(AddressOf Me.Item_Click)
Next


JONATHANSTECKER 13/08/2010 20:59:13
#350230
Resposta escolhida
Acho que assim funcionaria Foxman.
Dá uma testada ai...

Dim Contador As Integer = 0

Dim item As New ToolStripMenuItem
For I = 0 To lstProdutosLancados.Columns.Count - 1
With item
.Name = [Ô]OcultarColunas[Ô]
.Text = [Ô]Ocultar colunas[Ô]
With .DropDownItems.Add(lstProdutosLancados.Columns.Item(I).Text)
.Tag = Contador
AddHandler .Click, AddressOf OcultarColunas_Click
End With
End With
CMProdutos.Items.Add(item)
Contador += 1
Next


Sub OcultarColunas_Click(ByVal sender As Object, ByVal e As System.EventArgs)
MsgBox(CType(sender, ToolStripItem).Tag)
End Sub
FOXMAN 13/08/2010 21:10:30
#350231
Citação:

:
Fox Men serrar que você poderia me enviar um exemplo ?



Um exemplo do menustrip ???

JONATHANSTECKER 13/08/2010 21:30:18
#350236
Citação:

Com tudo isso o que desejo é :

Ocultar a coluna clicada no menuitem.




Resolvido Foxman

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Contador As Integer = 0

Dim item As New ToolStripMenuItem
For I = 0 To lstProdutosLancados.Columns.Count - 1
With item
.Name = [Ô]OcultarColunas[Ô]
.Text = [Ô]Ocultar colunas[Ô]
With .DropDownItems.Add(lstProdutosLancados.Columns.Item(I).Text)
.Tag = Contador
AddHandler .Click, AddressOf OcultarColunas_Click
End With
End With
CMProdutos.Items.Add(item)
Contador += 1
Next

End Sub

Sub OcultarColunas_Click(ByVal sender As Object, ByVal e As System.EventArgs)
lstProdutosLancados.Columns(CType(sender, ToolStripItem).Tag).Width = 0
End Sub

End Class
FOXMAN 13/08/2010 22:47:03
#350243
Jonathans,

aki deve estar com algum problema no meu vb.net pois o seu projeto abre com erros e nem consigo visualizar o formulário.

Mas tipo.

se eu passar seu código para dentro do evento de um botão como é o meu caso aqui, ocorre erro de evento, ou seja ele diz que o evento .Click não faz parte do objeto.



Qdo rodo o projeto veja o erro ao clicar no subitem desejado :

Run-time exception thrown : System.Reflection.AmbiguousMatchException - Overload resolution failed because no Public [ô]Item[ô] is most specific for these arguments:
[ô]Public Overrides ReadOnly Property Item(key As String) As System.Windows.Forms.ColumnHeader[ô]:
Not most specific.
[ô]Public Overrides ReadOnly Property Item(index As Integer) As System.Windows.Forms.ColumnHeader[ô]:
Not most specific.

FOXMAN 14/08/2010 00:05:43
#350247
Vlw JONATHANS, funcionou certinho....


Fica ae um exemplo simples com muita funcionalidade.....

Valeu e obrigado....!!!
Tópico encerrado , respostas não são mais permitidas