动态生成菜单后,怎么加click事件(函数名在字符串变量中)(50分)

  • 主题发起人 主题发起人 小菠萝
  • 开始时间 开始时间

小菠萝

Unregistered / Unconfirmed
GUEST, unregistred user!
从数据库中取出菜单名和执行函数名,
现已将菜单加入到主菜单中了
System.Windows.Forms.ToolStripMenuItem miii = new ToolStripMenuItem();
miii.Text = mii.Text + "_1";
string str0 = "menu_exit_Click";
//private void menu_exit_Click(object sender, EventArgs e)
miii.Click += new EventHandler( ??? );
 
vs.net2005 C#下做的
 
如果这样的话,你实现一个统一的事件处理函数:
MenuEventHandler
在里面实现的时候,取得MenuItem的Text属性获得函数名
然后,采用反射机制,通过对象获得Type类型,再InvokeMethod来调用函数。
当然了,你的函数的参数定义一定是预先定义好的。
关于反射的示例代码如下:
Love love = new Love();
Type type = love.GetType();

Object obj = type.InvokeMember(null,
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);


//调用没有返回值的方法
type.InvokeMember("Display",BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance , null , obj , new object[]{"aldfjdlf"});

//调用有返回值的方法
int i = (int)type.InvokeMember("GetInt",BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance,null,obj,new object[]{1});
Console.WriteLine(i);

//设置属性值
type.InvokeMember("Name",BindingFlags.SetProperty,null,obj,new string[]{"abc"});
//获取属性值
string str=(string)type.InvokeMember("Name",BindingFlags.GetProperty,null,obj,null);
Console.WriteLine(str);

//设置字段值
type.InvokeMember("field1",BindingFlags.SetField,null,obj,new object[]{444});

//获取字段值
int f=(int)type.InvokeMember("field1",BindingFlags.GetField,null,obj,null);
Console.WriteLine(f);
Console.ReadLine();
 
我还是有点不知怎么用,
就菜单控制而言,
love 是菜农单项,还是菜单执行函数
调用没有返回值的方法中"{"aldfjdlf"}"应该是什么,函数名还是函数的参数
调用有返回值的方法中"{1}"应该是什么
 
xiammy希望能给段具体用的代码,我刚学C#,谢谢
我又重新开发一个新贴,
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3593513
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
794
import
I
后退
顶部