一个MDI你窗口,里面包含有子窗口;
我希望在出现子窗口的时候,把子窗口的所有Button 功能 添加到ToolBar里。我是这样实现的,在当前子窗口激活事件中,对ToolBar的Items进行操作。问题是:: ToolBar 里的 Click 事件如何邦定 子窗口Button 的 Click 事件呢?
如里是Java哪就好办了,用doClick真接触发Button的click事件!~在C#里没有吗。??---------------------------------------------------------------简单的问:: 根据以使用环境, Java 里 Button 的 doClick();方法,在c#里如何实现 ?--------------------------------------------------------------- //当前活动窗口
curForm = ((Forms.BaseForm)this.ActiveMdiChild);
//遍历所有窗体控件
foreach (Object obj in curForm.Controls)
{
//查找所有按钮类型
if (obj.GetType() == typeof(Button))
{
ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
Button btn = obj as Button;//得到按扭实例
toolbtn.Text = btn.Text;
toolbtn.Name = "t_" + btn.Name;
//怎样触发btn的Click事件呢?
...
...
}
我希望在出现子窗口的时候,把子窗口的所有Button 功能 添加到ToolBar里。我是这样实现的,在当前子窗口激活事件中,对ToolBar的Items进行操作。问题是:: ToolBar 里的 Click 事件如何邦定 子窗口Button 的 Click 事件呢?
如里是Java哪就好办了,用doClick真接触发Button的click事件!~在C#里没有吗。??---------------------------------------------------------------简单的问:: 根据以使用环境, Java 里 Button 的 doClick();方法,在c#里如何实现 ?--------------------------------------------------------------- //当前活动窗口
curForm = ((Forms.BaseForm)this.ActiveMdiChild);
//遍历所有窗体控件
foreach (Object obj in curForm.Controls)
{
//查找所有按钮类型
if (obj.GetType() == typeof(Button))
{
ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
Button btn = obj as Button;//得到按扭实例
toolbtn.Text = btn.Text;
toolbtn.Name = "t_" + btn.Name;
//怎样触发btn的Click事件呢?
...
...
}
有两个方案:方案一、扩展Button并将OnClick公开 class MyButton : Button
{
public void OnClick(EventArgs e)
{
base.OnClick(e);
}
}
把有关的Button button1 全部改成MyButton button1
把button1 = new Button 改成button1 = new MyButton
这样一来,你就可以在点击toolbtn的时候触发,OnClick了:
if (obj.GetType() == typeof(MyButton))
{
ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
MyButton btn = obj as MyButton;//得到按扭实例 toolbtn.Text = btn.Text;
toolbtn.Name = "t_" + btn.Name; toolbtn.Click += delegate
{
btn.OnClick(EventArgs.Empty); // <-----调用OnClick
};
}方案二、用Reflection(虽然简单,个人不太喜欢,因为调用保护成员违背了封装的原意)
System.Reflection.MethodInfo mi = typeof(Button).GetMethod(
"OnClick",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance
);//遍历所有窗体控件
foreach (Object obj in curForm.Controls)
{
if (obj.GetType() == typeof(Button))
{
ToolStripButton toolbtn = new ToolStripButton();//创建工具按键
Button btn = obj as Button;//得到按扭实例 toolbtn.Text = btn.Text;
toolbtn.Name = "t_" + btn.Name; toolbtn.Click += delegate
{
mi.Invoke(btn, new object[] { EventArgs.Empty });
};
}
}