2013-06-25 3 views
1

Я добавил этот код на форуме:DataGridView функция Контекстное меню

private void dataGridView1_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      ContextMenu a = new ContextMenu(); 
      a.MenuItems.Add(new MenuItem("Google")); 
      a.MenuItems.Add(new MenuItem("Yahoo")); 
      int currentMouseOverRow = dataGridView1.HitTest(e.X, e.Y).RowIndex; 
      if (currentMouseOverRow >= 0) 
      { 
       a.MenuItems.Add(new MenuItem(string.Format("", currentMouseOverRow.ToString()))); 
      } 
      a.Show(dataGridView1, new Point(e.X, e.Y)); 
     } 
    } 

    private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e) 
    { 
     currentMouseOverRow = e.RowIndex; 
    } 

    private void dataGridView1_CellMouseLeave(object sender, DataGridViewCellEventArgs e) 
    { 
     currentMouseOverRow = -1; 
    } 

Но как я могу добавить функцию к опции контекстного меню?

Для Google

Process.Start("https://www.google.com"); 

Для Yahoo,

Process.Start("https://www.yahoo.com"); 

т.д.

+0

ли вы имеете в виду, когда один пункта ContextMenu щелкнули, скажем, Google? – Edper

+0

@ Edper Да, я делаю. –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

1

Почему бы не добавить ваш ContextMenu, когда ваша форма loads, а не каждый раз, когда пользователь нажимает правой кнопкой мыши ваш DataGridView, это означает, что вы должны добавить Context Menu каждый раз, когда пользовательские права нажимают на ваш DatGridView.

Во-вторых, вместо ContextMenu сделать ContextMenuStrip вместо этого более у себя дома с DataGridView. Таким образом, ваш код будет выглядеть следующим образом:

ContextMenuStrip a = new ContextMenuStrip(); 

public Form1() 
{ 
    InitializeComponent(); 
    this.Load += new EventHandler(Form1_Load); 
} 

void Form1_Load(object sender, EventArgs e) 
{ 
    Image img = null; 
    a.Items.Add("Google", img, new System.EventHandler(ContextMenuClick)); 
    a.Items.Add("Yahoo", img, new System.EventHandler(ContextMenuClick)); 
    dataGridView1.ContextMenuStrip = a; 
} 

Тогда ваш EventHandler будет выглядеть следующим образом:

private void ContextMenuClick(Object sender, System.EventArgs e) 
{ 
    switch (sender.ToString().Trim()) 
    { 
     case "Google": 
     Process.Start("https://www.google.com"); 
     break; 
     case "Yahoo": 
     Process.Start("https://www.yahoo.com"); 
     break; 
    } 
} 

И ваш DataGridViewMouse Click обработчик будет выглядеть так:

void dataGridView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     int currentMouseOverRow = dataGridView1.HitTest(e.X, e.Y).RowIndex; 
     if (currentMouseOverRow >= 0) 
     { 
      a.Items.Add(string.Format("", currentMouseOverRow.ToString())); 
     } 
     a.Show(dataGridView1, new Point(e.X, e.Y)); 
    } 
} 
1

Вы должны использовать ClickEvent для пунктов меню:

//menu items constructor 
a.MenuItems.Add(new MenuItem("Google", new System.EventHandler(this.MenuItemClick))); 
a.MenuItems.Add(new MenuItem("Yahoo", new System.EventHandler(this.MenuItemClick))); 

private void MenuItemClick(Object sender, System.EventArgs e) 
{ 
    var m = (MenuItem)sender; 

    if (m.Text == "Google") 
    { 
     Process.Start("https://www.google.com"); 
    } 
} 
+0

Когда я попробовал это, ничего не случилось. –

+0

Является ли мероприятие уволенным? – gzaxx

+0

Да, это ... –

Смежные вопросы