Public Class Form1
Private btnSelector As New Button()
'สร้าง Buttnon
Private pCase As Integer
'สำหรับ เก็บส่วนของการเลือก Column
Private Sub SelectorClick(ByVal sender As Object, ByVal e As EventArgs)
Select Case pCase
Case 1
'value from dataGridView1_CellEnter
If True Then
MessageBox.Show("Show Dialog here!!")
Exit Select
End If
End Select
End Sub
Private Sub CreateButton(ByRef myButton As Button)
myButton.FlatStyle = FlatStyle.Flat
myButton.FlatAppearance.BorderSize = 0
myButton.Size = New Size(30, 19)
myButton.ImageAlign = ContentAlignment.MiddleCenter
myButton.FlatAppearance.MouseDownBackColor = Color.Transparent
myButton.FlatAppearance.MouseOverBackColor = Color.Transparent
myButton.BackColor = Color.Transparent
myButton.Image = WindowsApplication1.My.Resources.finds
' myButton.Image = Image.FromFile(CurDir() + "\pic\SearchBc.png")
'กำหนดรูปภาพ
myButton.Hide()
AddHandler myButton.Click, New EventHandler(AddressOf Me.SelectorClick)
'--------------------------------------------
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CreateButton(btnSelector)
DataGridView1.Controls.Add(btnSelector)
End Sub
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
If e.ColumnIndex = 0 Then
pCase = 1
Dim Loc As Rectangle = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, False)
Dim Wid As Integer = DataGridView1.CurrentCell.Size.Width
btnSelector.Location = New Point(Loc.X - 25 + Wid, Loc.Y)
btnSelector.Show()
End If
End Sub
Private Sub DataGridView1_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellLeave
If btnSelector.Focused <> True Then
btnSelector.Hide()
End If
End Sub
End Class
ผมดูโค้ดจากที่ให้มาเหมือนกับว่ามันขาดไปบางอย่าง จริงอยู่ที่สร้างปุ่มให้แสดงมาใน Even CellEnter
ตอนขยายคอลัมภ์ให้ถึงแม้ว่า Cell ที่ถูกเลือกจะอยู่ที่เดิมก็ตามเพราะคำสั่งมันถูกทำไปแล้วตอนเลือก Cell ครั้งแรก
จึงเป็นสาเหตุว่าทำไมปุ่มมันถึงไม่ย้ายตามในขณะที่ขยายคอลัมภ์
จากโค้ดข้างบนผมลองปรับดังนี้
1. ย้าย Dim Loc As Rectangle และ Dim Wid As Integer ออกจาก Even CellEnter ไปไว้ข้างบนแทน เพื่อใช้ร่วมกันกับ Even ColumnWidthChanged ที่จะสร้างให้ย้ายปุ่มตอนขยายคอลัมภ์
Code (VB.NET)
Private btnSelector As New Button()
'สร้าง Buttnon
Private pCase As Integer
'สำหรับ เก็บส่วนของการเลือก Column
Dim Loc As Rectangle 'ย้ายมาข้างบน เพื่อใช้กับ DataGridView1_ColumnWidthChanged
Dim Wid As Integer 'ย้ายมาข้างบน เพื่อใช้กับ DataGridView1_ColumnWidthChanged
2. ปรับโค้ดใน Even CellEnter
Code (VB.NET)
Private Sub DataGridView1_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
If e.ColumnIndex = 0 Then
pCase = 1
Loc = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, False)
Wid = DataGridView1.CurrentCell.Size.Width
btnSelector.Location = New Point(Loc.X - 30 + Wid, Loc.Y)
btnSelector.Show()
End If
End Sub
Private Sub DataGridView1_ColumnWidthChanged(sender As Object, e As DataGridViewColumnEventArgs) Handles DataGridView1.ColumnWidthChanged
Loc = DataGridView1.GetCellDisplayRectangle(0, DataGridView1.CurrentRow.Index, False)
Wid = DataGridView1.CurrentCell.Size.Width
btnSelector.Location = New Point(Loc.X - 30 + Wid, Loc.Y)
End Sub