一个关于IrisSkin皮肤控件的问题
se = new SkinEngine(Application.OpenForms[0], thisdll.GetManifestResourceStream("deneb.amr.skin." + st.ToString() + ".ssk"));for (int i = 0; i < Application.OpenForms.Count; i++)
{
se.AddForm(Application.OpenForms[i]);
}
我在Form中使用了TabControl,所以当哪个TabPage先打开,哪个就皮肤生效了,后打开的tabPage皮肤就不起作用,该怎么解决啊 --------------------编程问答-------------------- 想从代码的修改来解决不太好弄, 不过上百度搜下skin的正确初始化用法, 应该可以解决. --------------------编程问答-------------------- 你在TabControl的变换改变事件里修改文件可以实现你的功能 --------------------编程问答-------------------- 我建议你不用这个垃圾控件,你会有意想不到的崩溃 --------------------编程问答-------------------- 对三楼说的话赞成一半。
虽然SkinEngine不一定会造成你程序的崩溃,
但是我觉得这个控件带来的种种不可预测的效果,
和不怎么理想的卡UI界面,
我就没用了。 --------------------编程问答-------------------- 楼主,
你不需要对所有Form都进行SkinEngine.AddForm操作
你只需要对MdiParent进行SkinEngine.AddForm(MdiParentFrm)
然后MdiParent的所有子Form都会有样式效果出现的。
--------------------编程问答-------------------- --------------------编程问答-------------------- 以前写过类似的,也用IrisSkin
public class SuperSKin
{
public static Sunisoft.IrisSkin.SkinEngine se = null;
/// <summary>
/// 增加换肤菜单
/// </summary>
/// <param name="toolMenu"></param>
public static void AddSkinMenu(ToolStripMenuItem toolMenu)
{
DataSet skin = new DataSet();
try
{
skin.ReadXml("skin.xml", XmlReadMode.Auto);
}
catch
{
}
if (skin == null || skin.Tables.Count < 1)
{
skin = new DataSet();
skin.Tables.Add("skin");
skin.Tables["skin"].Columns.Add("style");
System.Data.DataRow dr = skin.Tables["skin"].NewRow();
dr[0] = "系统默认";
skin.Tables[0].Rows.Add(dr);
skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);
}
foreach (SkinType st in (SkinType[])System.Enum.GetValues(typeof(SkinType)))
{
toolMenu.DropDownItems.Add(new ToolStripMenuItem(st.ToString()));
toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1].Click += new EventHandler(frm_Main_Click);
if (st.ToString() == skin.Tables[0].Rows[0][0].ToString())
{
((ToolStripMenuItem)toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1]).Checked = true;
frm_Main_Click(toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1], null);
}
}
toolMenu.DropDownItems.Add(new ToolStripMenuItem("系统默认"));
toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1].Click += new EventHandler(frm_Main_Click);
if (skin.Tables[0].Rows[0][0].ToString() == "系统默认")
{
((ToolStripMenuItem)toolMenu.DropDownItems[toolMenu.DropDownItems.Count - 1]).Checked = true;
}
}
static void frm_Main_Click(object sender, EventArgs e)
{
for (int i = 0; i < ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems.Count; i++)
{
if (((ToolStripMenuItem)sender).Text == ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i].Text)
{
((ToolStripMenuItem)sender).CheckState = CheckState.Checked;
DataSet skin = new DataSet();
skin.Tables.Add("skin");
skin.Tables["skin"].Columns.Add("style");
System.Data.DataRow dr = skin.Tables["skin"].NewRow();
dr[0] = ((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i].Text;
skin.Tables[0].Rows.Add(dr);
skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);
}
else
{
((ToolStripMenuItem)((ToolStripMenuItem)((ToolStripMenuItem)sender).OwnerItem).DropDownItems[i]).CheckState = CheckState.Unchecked;
}
}
if (((ToolStripMenuItem)sender).Text == "系统默认")
{
RemoveSkin();
DataSet skin = new DataSet();
skin.Tables.Add("skin");
skin.Tables["skin"].Columns.Add("style");
System.Data.DataRow dr = skin.Tables["skin"].NewRow();
dr[0] = "系统默认";
skin.Tables[0].Rows.Add(dr);
skin.WriteXml("skin.xml", XmlWriteMode.IgnoreSchema);
return;
}
foreach (SkinType st in (SkinType[])System.Enum.GetValues(typeof(SkinType)))
{
if (st.ToString() == ((ToolStripMenuItem)sender).Text)
{
ChangeSkin(st);
return;
}
}
}
/// <summary>
/// 改变皮肤
/// </summary>
/// <param name="st"></param>
public static void ChangeSkin(SkinType st)
{
System.Reflection.Assembly thisDll = System.Reflection.Assembly.GetExecutingAssembly();
if (se == null)
{
se = new Sunisoft.IrisSkin.SkinEngine(Application.OpenForms[0], thisDll.GetManifestResourceStream("FlashBulkEncryption.skin." + st.ToString() + ".ssk"));
se.Active = true;
for (int i = 0; i < Application.OpenForms.Count; i++)
{
se.AddForm(Application.OpenForms[i]);
}
}
else
{
se.SkinStream = thisDll.GetManifestResourceStream("FlashBulkEncryption.skin." + st.ToString() + ".ssk");
se.Active = true;
}
}
/// <summary>
/// 移除皮肤
/// </summary>
public static void RemoveSkin()
{
if (se == null)
{
return;
}
else
{
se.Active = false;
}
}
}
/// <summary>
/// 换肤类型
/// </summary>
public enum SkinType
{
Calmness,
DeepCyan,
DiamondBlue,
Eighteen,
Emerald,
GlassBrown,
Longhorn,
MacOS,
Midsummer,
MP10,
MSN,
OneBlue,
Page,
RealOne,
Silver,
SportsBlack,
SteelBlack,
SteelBlue,
vista1,
Vista2,
vista1_green,
Vista2_color1,
Vista2_color2,
Vista2_color3,
Vista2_color4,
Vista2_color5,
Vista2_color6,
Vista2_color7,
Warm,
Wave,
XPSilver
}
应用: SuperSKin.AddSkinMenu(选择皮肤ToolStripMenuItem);
//用的ToolStripMenuItem控件选择不同皮肤 --------------------编程问答--------------------
果然,C#2010一个toolbar老是崩溃,其他界面还没发现。 --------------------编程问答-------------------- DotNetBar界面还不错。 --------------------编程问答--------------------
我搜到一个叫DotnetSkin的组件,用着还行,请问跟你说的一样吗? --------------------编程问答-------------------- Look and study
贴图片很累吧,用《Csdn收音机》截图功能轻松解决! --------------------编程问答-------------------- 使用皮肤控件 毛病多多 --------------------编程问答-------------------- 不建议使用IrisSkin,各种卡界面,卡UI,建议还是自己有空时研究下美化控件 --------------------编程问答-------------------- 把TABPAGE中的几个TAB都做成用户自定义控件,然后在第一个界面全都初始化,然后当切换第二个时显示,这样就能挂上皮肤了
--------------------编程问答-------------------- 呵呵。。。。。。。。。。。
补充:.NET技术 , C#