2016-03-23 13 views
1

こんにちは私はメニューを示していますが、私は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); 
     } 
    } 
の1をクリックまたはマウスホバー時にサブメニューを表示したい私の datagridview上で右クリックイベントを追加しました

しかし私はShow DetailsUpdateである私のメニューの2 menuitemsを見ることができる、私は更新のためのサブメニューを見ることができない。

+0

私は 'のMenuItem updateStatus'を追加する任意のコードが表示されません'my_menu'に –

答えて

2

サブメニューアイテムを追加するには、希望のアイテムをToolStripMenuItemにキャストし、サブアイテムをDropDownItemsプロパティに追加する必要があります。コンストラクタでイベントハンドラをフックします。あなたはToolStripMenuItem.Name上の論理チェックを持つユニークなイベントハンドラまたは単に1つのハンドラでそれぞれを作成することができます。

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)ありがとう.. –

関連する問題