dataGridView上下文菜单功能

时间:2013-06-25 07:37:45

标签: c#

我已将此代码添加到论坛中:

    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;
    }

但是如何将该功能添加到上下文菜单选项?

谷歌,

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

对于雅虎,

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

2 个答案:

答案 0 :(得分: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");
     }
}

答案 1 :(得分: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;
    }
 }

您的DataGridView Mouse 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));
     }
 }