Tôi muốn mở rộng DataGridView để thêm một ContextMenu thứ hai để chọn những cột nào có thể nhìn thấy trong gird. ContextMenu mới sẽ được hiển thị trên kích chuột phải vào tiêu đề của cột.Làm cách nào để tôi định vị chính xác Trình đơn ngữ cảnh khi tôi nhấp chuột phải vào tiêu đề cột của DataGridView?
Tôi gặp khó khăn khi có được vị trí ngang chính xác để hiển thị menu ngữ cảnh. Làm thế nào tôi có thể sửa lỗi này?
public partial class Form1 : Form
{
DataGridView dataGrid;
ContextMenuStrip contextMenuStrip;
public Form1()
{
InitializeComponent();
dataGrid = new DataGridView();
Controls.Add(dataGrid);
dataGrid.Dock = System.Windows.Forms.DockStyle.Fill;
dataGrid.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(ColumnHeaderMouseClick);
dataGrid.DataSource = new Dictionary<string, string>().ToList();
contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.Add("foo");
contextMenuStrip.Items.Add("bar");
}
private void ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
contextMenuStrip.Show(PointToScreen(e.Location));
}
}
}
Trình đơn nội dung xuất hiện ở góc trên cùng bên trái của màn hình vì vị trí e.location là vị trí chuột trong tiêu đề cột. Tôi đã giải quyết vấn đề ngay bây giờ nhưng cảm ơn vì đã giúp đỡ. –
Theo câu trả lời của bạn cho câu hỏi của bạn e.location là trong datagrid, không columnheader, do đó authority_tech là chính xác. –
Có vẻ như tôi đã kiểm tra câu trả lời của authority_tech kém và anh ấy thực sự đúng nếu được sử dụng trong sự kiện MouseDown. –