Показать подменю справа Щелкните по DataGridView - C #

Привет, я добавил событие щелчка правой кнопкой мыши на моем datagridview, которое показывает меню, но я хочу показать подменю при нажатии или наведении курсора мыши на один из menuItem

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 Details и Update, я не вижу подменю для обновления.


person Umm E Habiba Siddiqui    schedule 23.03.2016    source источник
comment
Я не вижу никакого кода, добавляющего MenuItem updateStatus к my_menu   -  person Henk Holterman    schedule 24.03.2016


Ответы (1)


Чтобы добавить пункты подменю, нужно привести нужный пункт к 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);
}
person OhBeWise    schedule 23.03.2016