继承菜单,给它加上你想要的属性如下
sing System;
using System.Windows.Forms;namespace com.uncnet.wl.client
{
/// <summary>
/// 继承MenuItem类,增加Tag属性
/// </summary>
public class uncMenuItem : MenuItem
{
private object tag = "";
private string pID = "";
private string dllName = "";
private string nameSpace = "";
private string libraryName = "";
private string sectionNM = ""; public uncMenuItem( string inMenuItemText )
{
this.Text = inMenuItemText; } public uncMenuItem( )
{ } /// <summary>
/// 获取或设置包含有关uncMenuItem的数据的对象
/// </summary>
public object Tag
{
get
{
return tag;
}
set
{
tag = value;
}
} /// <summary>
/// 获取或设置菜单父ID
/// </summary>
public string PID
{
get
{
return pID;
}
set
{
this.pID = value;
}
} /// <summary>
/// 获取或设置DLL文件名
/// </summary>
public string DllName
{
get
{
return dllName;
}
set
{
this.dllName = value;
}
} /// <summary>
/// 获取或设置Dll的命名空间
/// </summary>
public string NameSpace
{
get
{
return this.nameSpace;
}
set
{
this.nameSpace = value;
}
} /// <summary>
/// 模块英文名
/// </summary>
public string SectionNM
{
get
{
return this.sectionNM;
}
set
{
this.sectionNM = value;
}
} /// <summary>
/// 程序集名称
/// </summary>
public string LibraryName
{
get
{
return this.libraryName;
}
set
{
this.libraryName = value;
}
} }
}
sing System;
using System.Windows.Forms;namespace com.uncnet.wl.client
{
/// <summary>
/// 继承MenuItem类,增加Tag属性
/// </summary>
public class uncMenuItem : MenuItem
{
private object tag = "";
private string pID = "";
private string dllName = "";
private string nameSpace = "";
private string libraryName = "";
private string sectionNM = ""; public uncMenuItem( string inMenuItemText )
{
this.Text = inMenuItemText; } public uncMenuItem( )
{ } /// <summary>
/// 获取或设置包含有关uncMenuItem的数据的对象
/// </summary>
public object Tag
{
get
{
return tag;
}
set
{
tag = value;
}
} /// <summary>
/// 获取或设置菜单父ID
/// </summary>
public string PID
{
get
{
return pID;
}
set
{
this.pID = value;
}
} /// <summary>
/// 获取或设置DLL文件名
/// </summary>
public string DllName
{
get
{
return dllName;
}
set
{
this.dllName = value;
}
} /// <summary>
/// 获取或设置Dll的命名空间
/// </summary>
public string NameSpace
{
get
{
return this.nameSpace;
}
set
{
this.nameSpace = value;
}
} /// <summary>
/// 模块英文名
/// </summary>
public string SectionNM
{
get
{
return this.sectionNM;
}
set
{
this.sectionNM = value;
}
} /// <summary>
/// 程序集名称
/// </summary>
public string LibraryName
{
get
{
return this.libraryName;
}
set
{
this.libraryName = value;
}
} }
}
解决方案 »
- 问歌关于dataGridView的问题
- 修改注册表中的值
- datagridview的数据显示格式
- 复制文件时如何在新线程中显示进度条的进度
- 纠结于命名空间namespace和背景闪烁
- 这是BUG吗?Binding绑定自定义属性,会改变RowState
- DbCommandBuilder的问题,请教!!
- C#调用C++的DLL传结构体指针参数,尝试读取或写入受保护的内存,这通常指示其他内存已损坏。怎么解决啊!
- 菜农求救:怎样得到AxMSChart控件里面画的二维图形的原点坐标啊
- 我今天去參加了微軟的.NET發布會﹐帶回一點技朮文檔﹐要的留下E-mail !
- 求教:关于查询的问题
- c#入门问题,高手请看看
谢谢 brightheroes(闭关)的答复。
平时我也是像brightheroes(闭关)这种做法的,不过我很想知道有没有其他更简单的方法?
根据用户来动态的生成他拥有的菜单项目至于我的那个类,主要是为了用反射才做的
顺便加了个tag而已
2、使用数据库,与XML的原理一样:)
而且,你在数据库中万一改动了什么地方,你的程序就死定了,肯定要重新写过改动的地方
{
if(this.ds .Tables [0].Rows [i][2].ToString () =="-1") {
cmdLink = new C1CommandLink();
cmdMenu = new C1CommandMenu();
this.c1MainMenu1.CommandLinks.Add( cmdLink );
this.c1CommandHolder2.Commands.Add( cmdMenu );
cmdLink.Command = cmdMenu;
cmdLink.Text = this.ds.Tables [0].Rows [i][4].ToString ();
cmdMenu.Name = this.ds.Tables [0].Rows [i][1].ToString ();
cmdMenu.Text = this.ds.Tables [0].Rows [i][4].ToString (); for( int k = 0; k < this.ds.Tables [0].Rows .Count; k ++ )
{
if ( this.ds .Tables [0].Rows [k][2].ToString () ==this.ds .Tables [0].Rows [i][0].ToString () )
{
cmdLink = new C1CommandLink();
cmd = new C1Command();
this.c1CommandHolder2.Commands.Add( cmd );
cmdLink.Command = cmd;
cmdLink.Text = this.ds.Tables [0].Rows [k][4].ToString ();
cmd.Name = this.ds.Tables [0].Rows [k][1].ToString ();
cmd.Text = this.ds.Tables [0].Rows [k][4].ToString ();
cmd.Click += new ClickEventHandler( this.c1Command_Click );
cmdMenu.CommandLinks.Add( cmdLink );
_index2 ++;
}
} _index1 ++;
}
}
应该是用递归的,但是我们的程序没有必要,所以就没有用:)
private void c1Command_Click(object sender, C1.Win.C1Command.ClickEventArgs e)
{
try
{
this.OpenSection ("com.uncnet.wl."+ e.CallerLink.Command .Name.ToString () ,e.CallerLink.Command .Name.ToString () , e.CallerLink.Text );
if (e.CallerLink.Text.Trim () != "-")
{
this.lblFormName .Text = e.CallerLink.Text;
}
}
catch(Exception ex)
{
uncString.ShowWarning ("该功能还没有安装!"+ex.ToString ());
}
}
#region 操作分发
/// <summary>
/// 操作分发
/// </summary>
/// <param name="inSectionNamespacePrefix">要打开模块的命名空间</param>
/// <param name="inLibraryName">要打开模块的类名</param>
/// <param name="inSectionNM">要打开模块的英文名称</param>
private void OpenSection( string nameSpace , string section , string action)
{
if (action.Trim () == "-") return ;
foreach ( Control control in this.panel1.Controls )
{
if ( control != null )
control.Dispose();
}
try
{
Type type = Type.GetType( nameSpace + ".Portal," + section );
MethodInfo info = type.GetMethod( "GetPortal" );
object Portal = Activator.CreateInstance( type );
object[] args = new object[1];
args[0] = action;
Form ShowForm = (Form)info.Invoke( Portal,args );
ShowForm.TopMost = false;
ShowForm.TopLevel = false;
ShowForm.FormBorderStyle = FormBorderStyle.None;
ShowForm.Dock = DockStyle.Fill;
this.panel1.Controls.Add( ShowForm );
ShowForm.Show ();
this.lblFormName .Text = "";
}
catch(Exception ex)
{
uncString.ShowWarning ("该功能还没有安装!"+ex.ToString ());
}
}
#endregion 操作分发
你添加的事件里打开窗体,我想问的是,
Form ShowForm = (Form)info.Invoke( Portal,args );
你在这里传递了一个string类型的参数来调用窗体,如果有其他类型的参数呢??
比如: object[] args = new object[]{string1,string2,new MyClass1[],new MyClass2[]};
如果是string类型的参数,当然可以纪录在数据库里,但是其他类型的,你怎么办??
谢谢各位的参与,谢谢brightheroes(闭关)兄弟。