none
ContextMenuStrip秀出位置的問題? RRS feed

  • 問題

  •  

    各位前輩好:

    我的環境是VS2008 (VB) + Vista

     

    我加入一個ContextMenuStrip控制項(ContextMenuStrip1)在Form上,並設定Form的ContextMenuStrip屬性為ContextMenuStrip1,這樣在Form上按Mouse右鍵時就會有個pop up出現,但是我希望在使用者按下某個Label時也可以出現ContextMenuStrip1,所以我就寫下面這樣的程式:

     

    Private Sub LblSetting_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LblSetting.Click
            ContextMenuStrip1.Left = 300
            ContextMenuStrip1.Top = 300        

            ContextMenuStrip1.Show()
    End Sub

     

    但是ContextMenuStrip1確一直出現在螢幕的最左上角(在Form的外面),請問我要如何把ContextMenuStrip1移到我要的位置。

     

    煩請前輩指點,謝謝。

    2008年6月30日 上午 02:08

解答

  • 可以在MouseUp事件做相關處理,例如

    Code Snippet

    Private Sub Label1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseUp

            If e.Button = Windows.Forms.MouseButtons.Right Then

                ContextMenuStrip1.Show(sender, New Point(e.X, e.Y))

            End If

        End Sub

     

     

      稍後將移文到 Windows Forms General 討論版塊。

    2008年6月30日 上午 04:22
  • 謝謝bauann

    我自已研究了一個方法,如下~~

     

        Private Sub LblSetting_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LblSetting.Click
            ContextMenuStrip1.Show()
            Dim p As Point = LblSetting.PointToScreen(p)
            ContextMenuStrip1.Left = p.X
            ContextMenuStrip1.Top = p.Y

      End Sub

     

    但是Bauann大的方法位置秀的比較正確,非常謝謝您的指點~

     

    2008年6月30日 上午 04:23

所有回覆

  • Code Snippet

    Private Sub LblSetting_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LblSetting.Click
            ContextMenuStrip1.Left = CType(sender, Label).Left
            ContextMenuStrip1.Top = CType(sender, Label).Top

            ContextMenuStrip1.Show()
    End Sub

     

     

     

    Try it.

     

    • 已提議為解答 horngsh 2011年7月24日 上午 08:06
    2008年6月30日 上午 02:38
    版主
  • 謝謝小朱大

     

    我試了您的程式,可是還一樣出現在左上角,我發現如果我有在form點過右鍵(讓ContextMenuStrip1出現)後,再去Label上Click的話,ContextMenuStrip1就不是出現在左上角,而是出現在上一次出現的位置,它會記得最後一次出現的位置。

     

    麻煩前輩再指點。謝謝。

    2008年6月30日 上午 03:45
  • 可以在MouseUp事件做相關處理,例如

    Code Snippet

    Private Sub Label1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseUp

            If e.Button = Windows.Forms.MouseButtons.Right Then

                ContextMenuStrip1.Show(sender, New Point(e.X, e.Y))

            End If

        End Sub

     

     

      稍後將移文到 Windows Forms General 討論版塊。

    2008年6月30日 上午 04:22
  • 謝謝bauann

    我自已研究了一個方法,如下~~

     

        Private Sub LblSetting_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LblSetting.Click
            ContextMenuStrip1.Show()
            Dim p As Point = LblSetting.PointToScreen(p)
            ContextMenuStrip1.Left = p.X
            ContextMenuStrip1.Top = p.Y

      End Sub

     

    但是Bauann大的方法位置秀的比較正確,非常謝謝您的指點~

     

    2008年6月30日 上午 04:23
  •    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
            If e.Button = Windows.Forms.MouseButtons.Right Then
                ContextMenuStrip1.Show(MousePosition.X, MousePosition.Y)
            End If
        End Sub

     

    2011年3月27日 上午 06:13