2016-03-23 87 views
1

您好我加右擊事件對我datagridview,顯示菜單,但我想顯示點擊時子菜單或鼠標懸停在的menuItem顯示子菜單 - C#

protected void datagridview1_MouseClick(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      ContextMenuStrip my_menu = new ContextMenuStrip(); 
      int position_xy_mouse_row = dataGridView1.HitTest(e.X, e.Y).RowIndex; 

      if (position_xy_mouse_row >= 0) 
      { 
       my_menu.Items.Add("Show Details").Name = "Details"; 

       if ((SecurityLevel == "something" && dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value1") || (SecurityLevel == "something" && dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value2")) 
       { 
        my_menu.Items.Add("update").Name = "Update "; 
        if (dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value1") 
        { 
         MenuItem updateStatus = new MenuItem("Update"); 
         updateStatus.MenuItems.Add(new MenuItem("somevalue").Name = "somevalue"); 
         updateStatus.MenuItems.Add(new MenuItem("someothervalue").Name = "someothervalue"); 
        } 
        if (dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value2") 
        { 
         MenuItem updateStatus = new MenuItem("Update"); 
         updateStatus.MenuItems.Add(new MenuItem("someothervalue").Name = "someothervalue"); 
         updateStatus.MenuItems.Add(new MenuItem("newvalue").Name = "newvalue"); 
        } 
       } 
      } 
      my_menu.Show(dataGridView1, new Point(e.X, e.Y)); 
      my_menu.ItemClicked += new ToolStripItemClickedEventHandler(my_menu_ItemClicked); 
     } 
    } 
一個

但我只能在我的菜單上看到2個菜單項,它們分別是Show DetailsUpdate,我看不到用於更新的子菜單。

+0

我看不出有任何的代碼添加菜單項'updateStatus'到'my_menu' –

回答

2

要添加子菜單項,您需要將所需項目投射到ToolStripMenuItem,然後將子項添加到DropDownItems屬性 - 在構造函數中掛接事件處理函數。您可以在ToolStripMenuItem.Name一個獨特的事件處理程序,或只是一個單一的處理器與邏輯檢查創建的每個:

if (position_xy_mouse_row >= 0) 
{ 
    my_menu.Items.Add("Show Details").Name = "Details"; 

    if ((SecurityLevel == "something" && dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value1") || (SecurityLevel == "something" && dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value2")) 
    { 
     my_menu.Items.Add("update").Name = "Update"; 
     if (dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value1") 
     { 
      (my_menu.Items["Update"] as ToolStripMenuItem).DropDownItems.Add("somevalue", null, new EventHandler(this.SubItem_Click)).Name = "somevalue"; 
      (my_menu.Items["Update"] as ToolStripMenuItem).DropDownItems.Add("someothervalue", null, new EventHandler(this.SubItem_Click)).Name = "someothervalue"; 
     } 
     if (dataGridView1.SelectedRows[0].Cells[8].Value.ToString() == "value2") 
     { 
      (my_menu.Items["Update"] as ToolStripMenuItem).DropDownItems.Add("someothervalue", null, new EventHandler(SubItem_Click)).Name = "someothervalue"; 
      (my_menu.Items["Update"] as ToolStripMenuItem).DropDownItems.Add("newvalue", null, new EventHandler(SubItem_Click)).Name = "newvalue"; 
     } 
    } 
} 
my_menu.Show(dataGridView1, new Point(e.X, e.Y)); 
my_menu.ItemClicked += new ToolStripItemClickedEventHandler(MenuItem_Clicked); 

那麼你的處理程序:

private void MenuItem_Clicked(object sender, ToolStripItemClickedEventArgs e) 
{ 
    Console.WriteLine("Clicked {0}", e.ClickedItem.Name); 
} 

private void SubItem_Click(object sender, EventArgs e) 
{ 
    Console.WriteLine("Clicked {0}", (sender as ToolStripMenuItem).Name); 
} 
+0

它工作(Y)謝謝.. –