Jump to content
Fórum Script Brasil
  • 0

Menu Suspenso


Question

E ai Gray, essa duvida aqui é pra você porque foi voce que me ajudou da ultima vez, ve se você consegue me ajudar: Bem, uns posts atrás ai, você me ajudou a fazer que quando eu clicasse em uma DataGrid com o botão direto, ela aparecesse um Menu Suspenso. O código é esse:

    Private Sub dgtabela_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Button = MouseButtons.Right Then
            Dim obj As New Point
            obj.X = e.X
            obj.Y = e.Y
            Cmf.Show(dgtabela, obj)
        End If
    End Sub

Bem, só que acontece que isso não está funcionando. Bem, agora um detalhe, é que eu coloquei a DataGrid em cima de uma Tabcontrol, é isso que não está fazendo esse click direito funcionar? Se for, como eu resolvo isso? valeu!

Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Não está funcionando? O que acontece exatamente? Se não acontece nada, verifique o que digo abaixo.

Você está utilizando o VS.NET mesmo ou o #Develop (SharpDevelop)? Estou perguntando porque estranhei a declaração da rotina...

Private Sub dgtabela_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)

... faltando o "Handles dgtabela.MouseDown".

Abraços,

Graymalkin

Link to post
Share on other sites
  • 0

Não, estou usando o Visual Studio, VB.NET mesmo. Bem, não será por causa de uma classe que eu estou usando na DataGrid? É uma classe que você fez pra mim pra mudar os numeros do lado, lembra? É essa:

    Public Class MyDataGrid
        Inherits DataGrid

        Public Event VScroll(ByVal sender As Object, ByVal se As System.Windows.Forms.ScrollEventArgs)

        Public Sub ScrollTo(ByVal se As ScrollEventArgs)
            If Not Me.DataSource Is Nothing Then
                Me.GridVScrolled(Me, se)
            End If
        End Sub

        Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(pe)

            If Not Me.DataSource Is Nothing Then
                Dim info As HitTestInfo = Me.HitTest(10, 48)

                If info.Type = DataGrid.HitTestType.RowHeader Then
                    Dim fonte As New Font("Tahoma", 8)
                    Dim cor As Brush = Drawing.Brushes.Black
                    Dim posY As Long
                    Dim posX As Long

                    For i As Integer = info.Row To info.Row + Me.VisibleRowCount
                        Try
                            posX = Me.GetCellBounds(i, 0).X - 30
                            posY = Me.GetCellBounds(i, 0).Y
                        Catch ex As Exception
                            posX = -1
                            posY = -1
                        End Try
                        If posX >= 0 And posY >= 0 Then
                            Dim área As New RectangleF(posX, posY, 30, 30)

                            pe.Graphics.DrawString(Hex(i.ToString()), fonte, cor, área)
                        End If
                    Next
                End If
            End If
        End Sub
        Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se As System.Windows.Forms.ScrollEventArgs)
            MyBase.GridVScrolled(sender, se)
            RaiseEvent VScroll(sender, se)
        End Sub
    End Class
E lá em cima, nas declarações, a DataGrid está declarada desta maneira:
    Friend WithEvents dgtabela As MyDataGrid

POde ser esse o motivo da falta do Handles?

Link to post
Share on other sites
  • 0
POde ser esse o motivo da falta do Handles?

Se não estiver ocorrendo nada, pode ser sim. Porque é o Handles que diz que aquela rotina deve ser executada quando o determinado evento for invocado.

Abraços,

Graymalkin

Link to post
Share on other sites
  • 0

Ah, agora sim, problema resolvido!  laugh.gif  Mas estranho ele sumir assim só porque eu mudei o controle de lugar, não é?

Na verdade não é tão estranho porque, se você tirar a parte do Handles, aquela dali é uma rotina (Sub) como qualquer outra. O que diz que esta rotina deve ser chamada quando o evento for invocado é justamente o Handles.

Abraços,

Graymalkin

Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Cloud Computing


  • Forum Statistics

    • Total Topics
      148691
    • Total Posts
      644524
×
×
  • Create New...