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);//打开自定义链接
}
个性的物联网浏览器实现了自定义导航菜单了