이번 프로젝트를 하면서 컨트롤을 만드는 과정에서 DataGridView Column Header 에 Context Menu를 붙여야만 했습니다. 
저 메뉴상에 필터링 조건을 메뉴에 집어 넣어야 하고 Sorting 메뉴도 넣어야하고...

근데 훔... 컨텍스트 메뉴를 붙여야 하는데 어떻게 붙여야 할지 난감했죠.

그래서 헛짓도 참 많이 했네요.

맨땅에 헤딩도 많이하고... ㅡㅡ'
 
찾다찾다 이런게 있더군요...




DataGridView 컨트롤에 GetColumnDisplayRectangle 라는 메소드가 있더라고요.
Rectangle 을 반환하는... 내가 찾고 있던... 드뎌 찾아냈습니다. 

근데 뭐 이거 보다 더 좋은 방법이 있는 거 아냐? ㅡㅡ'

하이간 이걸 쓰니 잘 되네요...

    Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick

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

            Dim rect As Rectangle = Me.DataGridView1.GetColumnDisplayRectangle(e.ColumnIndex, True)

            Me.ContextMenuStrip1.Items.Clear()
            Me.ContextMenuStrip1.Items.Add(Me.DataGridView1.Columns(e.ColumnIndex).HeaderText)
            Me.ContextMenuStrip1.Items.Add("Woojja")
            Me.ContextMenuStrip1.Items.Add("Fighting")
            Me.ContextMenuStrip1.Items.Add("-")
            Me.ContextMenuStrip1.Items.Add("Nice")
            Me.ContextMenuStrip1.Items.Add("MHVB")

            Dim p As Point = New Point(rect.X, Me.DataGridView1.ColumnHeadersHeight)

            Me.ContextMenuStrip1.Show(Me.DataGridView1.PointToScreen(p))

        End If

    End Sub



한번 보시고 다른 좋은 방법이 있으면 알려주셔요...




행복한 고수되세요... ^^



woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


반응형

+ Recent posts