我想擴展DataGridView添加第二個ContextMenu來選擇哪些列在網格中可見。新的ContextMenu將顯示在列標題的右鍵上。當我右鍵單擊DataGridView的列標題時,如何正確定位上下文菜單?
我很難得到正確的水平位置來顯示上下文菜單。我該如何解決這個問題?
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));
}
}
}
內容菜單出現在屏幕的左上角,因爲e.location是列標題內的鼠標位置。我已經解決了這個問題,但感謝您的幫助。 –
根據你的回答你的問題e.location是在datagrid,而不是columnheader,所以competent_tech是正確的。 –
這似乎是我測試competent_tech的答案不好,他確實是正確的,如果在MouseDown事件中使用。 –