Chciałbym rozszerzyć DataGridView, aby dodać drugie ContextMenu, które pozwala wybrać kolumny widoczne w przepuście. Nowe menu kontekstowe będzie wyświetlane po kliknięciu prawym przyciskiem myszy nagłówka kolumny.Jak poprawnie ustawić menu kontekstowe po kliknięciu prawym przyciskiem myszy nagłówka kolumny DataGridView?
Mam trudności z uzyskaniem prawidłowej pozycji poziomej, aby wyświetlić menu kontekstowe. Jak mogę to poprawić?
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));
}
}
}
Menu zawartości pojawia się w lewym górnym rogu ekranu, ponieważ pozycja e.location jest pozycją myszy w nagłówku kolumny. Rozwiązałem teraz problem, ale dziękuję za pomoc. –
Zgodnie z twoją odpowiedzią na twoje pytanie e.lokacja jest w obrębie datagridu, a nie kolumnowego, więc competence_tech było poprawne. –
Wygląda na to, że źle odpowiedziałem na kompetentną odpowiedź i rzeczywiście jest poprawny, jeśli jest używany w ramach zdarzenia MouseDown. –