C# 动态菜单

C# 动态菜单,c#,.net,winforms,C#,.net,Winforms,我正在尝试使用C#WinForm项目创建动态菜单。我的数据库结构如下所述。我可以创建顶部菜单,即“文件”、“编辑”、“搜索”。但是我不能为子菜单运行递归函数 mysql> select * from dynamicmenu; +------+-----------------+--------+-------+-----------+ | SLN | Child | Parent | Level | Reference | +------+--------------

我正在尝试使用C#WinForm项目创建动态菜单。我的数据库结构如下所述。我可以创建顶部菜单,即“文件”、“编辑”、“搜索”。但是我不能为子菜单运行递归函数

mysql> select * from dynamicmenu;
+------+-----------------+--------+-------+-----------+
| SLN  | Child           | Parent | Level | Reference |
+------+-----------------+--------+-------+-----------+
|    1 | FILE            | NULL   |     0 | NULL      |
|    2 | EDIT            | NULL   |     0 | NULL      |
|    3 | SEARCH          | NULL   |     0 | NULL      |
|    4 | Session Manager | FILE   |     1 | 1         |
|    5 | Connect To      | FILE   |     1 | 1         |
|    6 | DO              | FILE   |     2 | 5         |
|    7 | Copy            | EDIT   |     1 | 2         |
|    8 | Paste           | EDIT   |     1 | 2         |
|    9 | Find Text       | SEARCH |     1 | 3         |
|   10 | Cut             | EDIT   |     2 | 7         |
|   11 | VMS             | FILE   |     3 | 6         |
+------+-----------------+--------+-------+-----------+
11 rows in set (0.00 sec)
c代码如下所示

mysqlConn conn;
private void Form1_Load(object sender, EventArgs e)
{
    conn = new mysqlConn();
    conn.OpenConnection();
    MySqlCommand cmd = new MySqlCommand("Select * from dynamicmenu", conn.connection);
    MySqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        if (dr["Parent"].ToString() == "")
        {
            menuStrip1.Items.Add(dr["Child"].ToString());
        }

        else if (dr["Parent"].ToString() != "")
        {

            AddSubMenu(new ToolStripMenuItem(dr["Child"].ToString()), dr["Parent"].ToString());
        }
    }
    dr.Close();
    conn.CloseConnection();

}

private void AddSubMenu(ToolStripMenuItem ChildItem, string ParentItem)
{
    foreach (ToolStripMenuItem item in menuStrip1.Items)
    {
        if (ParentItem == item.Name)
        {
            item.DropDownItems.Add(ChildItem);
        }
    }
}
请告知。

使用
toString()
而不是
名称

private void AddSubMenu(ToolStripMenuItem ChildItem, string ParentItem)
{
    foreach (ToolStripMenuItem item in menuStrip1.Items)
    {
        if (ParentItem == item.ToString())
        {
            item.DropDownItems.Add(ChildItem);
        }
    }
}

确切的问题是什么?“我不能运行递归函数”是什么意思?“添加子菜单”部分不工作。只有“如果(dr[“Parent”].ToString()=”)起作用。AddSubMenu()方法完全忽略菜单是树这一事实。您将其视为一个数组,因此只能找到顶级菜单项。递归自然适合于树遍历。您还完全忽略了一个事实,即菜单不仅仅是文本,在数据库中存储单击事件处理程序是您仍然需要完成的另外95%的工作。看起来您只是复制了OP的方法。你可能想改变一些东西,让它发挥作用。至少要弄清楚你改变了什么,以及它如何回答这个问题。简单的代码转储并不是一个好的答案。