通过配置json实现自定义菜单加载导航链接(c#)

json文件(写法可以相对自由,小错误可以自动纠正,两个键名称不能错误mnu_text,mnu_value)

用到了Newtonsoft.Json

[
{"mnu_text":"百度一下","mnu_value":"https://www.baidu.com"},
{"mnu_text":"-","mnu_value":"-"},
{"mnu_text":"今日头条","mnu_value":"https://www.toutiao.com"}
]

正常情况下不能有空格换行,为了更好的体现和添加自由一行一个菜单。分隔符写-即可

       private void update_diymenu()
        {
            ToolStripMenuItem tsmi;//子菜单对象
            try
            {
                string mnujson = x5zjHelper.Read_txt(diy_mnu_json);//一次性读取json文件
                mnujson = mnujson.Replace("\r\n", "").Replace(",", ",").Replace(" ", "").Replace("“", "\"").Replace("”", "\"");//删除空格回车换行错误输入
                Newtonsoft.Json.Linq.JArray jsonArr=GetToJsonList(mnujson);
                int diynum = jsonArr.Count();                
                //mnu_diy.DropDownItems.Clear();//先清空
                for (int d = 0; d < diynum; d++)
                {
                    tsmi = new ToolStripMenuItem();
                    diy_menu_list menu_item = JsonConvert.DeserializeObject<diy_menu_list>(jsonArr[d].ToString());
                    tsmi.Name = "mnu_diy_"+d;
                    if(menu_item.mnu_text == "-")
                    {
                        this.mnu_diy.DropDownItems.Add(new System.Windows.Forms.ToolStripSeparator());//分隔符
                    }
                    else
                    {
                        tsmi.Text = menu_item.mnu_text;//显示
                        tsmi.Tag = menu_item.mnu_value;//连接地址
                        tsmi.Click += new System.EventHandler(tsmi_Click);//事件通过sender来还原tag的url
                        this.mnu_diy.DropDownItems.Add(tsmi);
                    }                    
                }
            }
            catch(Exception ex)
            {
                tip_err(ex, "diyMenu");
            }
        }

用到的类

    public class diy_menu_list
    {
        public string mnu_text { get; set; }
        public string mnu_value { get; set; }

    }

关键方法

        public static Newtonsoft.Json.Linq.JArray GetToJsonList(string json)
        {
            Newtonsoft.Json.Linq.JArray jsonArr = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(json);
            return jsonArr;
        }

        /// <summary>
        /// 自定义菜单定义点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tsmi_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem mitm = (ToolStripMenuItem)sender;
            string diyurl = mitm.Tag!=null? mitm.Tag.ToString():"";
            openWeb(diyurl);//打开自定义链接
        }

个性的物联网浏览器实现了自定义导航菜单了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值