C# 利用动态加载菜单、子菜单方式 换肤
动态加载菜单、子菜单的方式本人已经搞定
最后一个问题是换肤问题:
本人想通过点击某皮肤子菜单的时候换皮肤,但是一直都没办法通过点击子菜单的时候获取子菜单的Text属性(原因是Text属性正是皮肤的名字。)
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//添加菜单一
subItem = AddContextMenu(“皮肤”, menuStrip1.Items, null);
//添加子菜单
foreach (SkinContainer MyStyle in SkinManager.Default.Skins)
{
AddContextMenu(MyStyle.SkinName, subItem.DropDownItems, new EventHandler(MenuClicked));
}
}
//添加子菜单Text属性
private ToolStripMenuItem AddContextMenu(string text,ToolStripItemCollection cms,EventHandler callback)
{
if(text == “-“)
{
ToolStripSeparator tsp = new ToolStripSeparator();
cms.Add(tsp);
return null;
}
else if (!string.IsNullOrEmpty(text))
{
ToolStripMenuItem tsmi = new ToolStripMenuItem(text);
tsmi.Tag = text + “TAG”;
if (callback != null) tsmi.Click += callback;
cms.Add(tsmi);
return tsmi;
}
return null;
}
//响应点击子菜单事件,但是以下内容都是错误的,无法获取子菜单Text属性,更加没办法换肤。
void MenuClicked(object sender,EventArgs e)
{
ToolStripItem[] Skin = this.menuStrip1.Items.Find(menuStrip1.Name, true);
string SkinName = Skin.ToString();
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = SkinName;
动态加载菜单、子菜单的方式本人已经搞定
最后一个问题是换肤问题:
本人想通过点击某皮肤子菜单的时候换皮肤,但是一直都没办法通过点击子菜单的时候获取子菜单的Text属性(原因是Text属性正是皮肤的名字。)
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//添加菜单一
subItem = AddContextMenu(“皮肤”, menuStrip1.Items, null);
//添加子菜单
foreach (SkinContainer MyStyle in SkinManager.Default.Skins)
{
AddContextMenu(MyStyle.SkinName, subItem.DropDownItems, new EventHandler(MenuClicked));
}
}
//添加子菜单Text属性
private ToolStripMenuItem AddContextMenu(string text,ToolStripItemCollection cms,EventHandler callback)
{
if(text == “-“)
{
ToolStripSeparator tsp = new ToolStripSeparator();
cms.Add(tsp);
return null;
}
else if (!string.IsNullOrEmpty(text))
{
ToolStripMenuItem tsmi = new ToolStripMenuItem(text);
tsmi.Tag = text + “TAG”;
if (callback != null) tsmi.Click += callback;
cms.Add(tsmi);
return tsmi;
}
return null;
}
//响应点击子菜单事件,但是以下内容都是错误的,无法获取子菜单Text属性,更加没办法换肤。
void MenuClicked(object sender,EventArgs e)
{
ToolStripItem[] Skin = this.menuStrip1.Items.Find(menuStrip1.Name, true);
string SkinName = Skin.ToString();
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = SkinName;
}
解决方案
20
void MenuClicked(object sender,EventArgs e)
{
//使用 (sender as ToolStripMenuItem).Text;
}
{
//使用 (sender as ToolStripMenuItem).Text;
}