如题:如题:父窗体上有一工具栏按钮BUTTON1,子窗体上有一TEXTBOX2和BUTTON2,BUTTON1按钮按下后,调用BUTTON2的事件处理程序.BUTTON2的事件处理程序:
private void button2_Click(object sender, System.EventArgs e)
{
TextBox2.text="调用成功";
}我把button2_Click变成PUBLIC后还是不对,请高手解答.还有人说是要将子窗体作为参数传入父窗体,在子窗体内声明一个公有的EVENT,但我不知如何调用,请给点代码.
private void button2_Click(object sender, System.EventArgs e)
{
TextBox2.text="调用成功";
}我把button2_Click变成PUBLIC后还是不对,请高手解答.还有人说是要将子窗体作为参数传入父窗体,在子窗体内声明一个公有的EVENT,但我不知如何调用,请给点代码.
解决方案 »
- 怎样获取主窗体的对象???
- 在一个单独的sql耗时查询操作进行中,我想在界面上显示进度条,如何才能解决?
- 请VB高手+C#高手帮我把VB写的这个函数翻译成C#的(在线...)
- 我要实现一个网站消息智能提醒的功能!大家给点意见!!
- 在C#中如何获取对方的IP?
- 通过反射取ArrayList,急,在线等
- serialPort的"DataReceived" 事件里为何不能访问窗体上的控件!
- 关于DataGrid分页的问题!
- 用richtextbox做了一个简单的编辑器,有一个问题请大家帮帮。
- 为什么把\\test去掉,连接数据库就失败!!!?????不明白!!谢了!
- 我是菜鸟,c#字符型转换为数值型,怎么写?
- 有关网页中设置Session的同步问题,给出答案立即给分
http://blog.csdn.net/tjvictor/archive/2006/06/23/824617.aspx
还容易实现
private void button1_Click(object sender, EventArgs e)
{
FormSub f = this.ActiveMdiChild as FormSub;
if (f != null)
{
f.callButtonclick();
}
}
在FromSub中编写如下的代码:internal void callButtonclick()
{
//以下的两个语句都可以实现调用button1_Click事件.
//button1.PerformClick();
button1_Click(this.button1, new EventArgs());
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("调用成功!");
}按上面说的写好代码后运行试试看成功不!
我参考了一个其它的做法,你看对不对?
用button的click示例,代码如下:
public class ChildForm : System.Windows.Forms.Form
{
//
public event EventHandler BtnClick;
//
private void button1_Click(object sender, System.EventArgs e)
{
if(this.BtnClick != null)
{
this.BtnClick(sender,e);
}
}
}public class MainForm : System.Windows.Forms.Form
{
private void button1_Click(object sender, System.EventArgs e)
{
ChildForm cldForm = new ChildForm();
cldForm.BtnClick+= new BtnClick(MainForm_BtnClick);
}
}2、在ChildForm中设置公有Button,
代码如下
public Button button1;
在MainForm中绑定button1的Click事件3、将ChildForm作为参数传递给MainForm,在MainForm中直接调用ChildForm中的方法。
------------------------------------------------------
但我在cldForm.BtnClick+= new BtnClick(MainForm_BtnClick); 这一行出错,说找不到new BtnClick、MainForm_BtnClick这两个对象.我把MainForm_BtnClick改成this.button1_click也不对。
是在第一种方法中用到的吧,是不是改为如下:
cldForm.BtnClick+= new EventHandler(MainForm_BtnClick);
private void MainForm_BtnClick(object sender, EventArgs e)
{
}2)方法能通过,但是觉得不是很专业.
3)方法也没有问题,但是觉得没有必要把ChildForm作为参数传到MainForm,因为MainForm中有ActiveMdiChild 可用,只要看一下ActiveMdiChild 是不是ChildForm就行了,如果是就用强制转换就可以了.
private static childform mychild=null;
public mainform(childform kk)
{
mychild=kk;
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
这种做法好不好。还有我认为private void MainForm_BtnClick(object sender, EventArgs e)
{
}
这里面是什么事都没有做呀!
to 还有我认为private void MainForm_BtnClick(object sender, EventArgs e)
{
}MainForm_BtnClick就是在Mainform中要委托的事件,在里面写上你要执行的代码就可以了。
但是你的理解有些不对,你这样做的结果是,当你在mdi窗体中按下button后,会自动执行主窗体的button,而不是在主窗体按button后,会自动执行mdi窗体的button,你正好写反了。
----------------------
这种方法不太好,原因在于要先于MainForm建立一个子窗体才行,
你可在MainForm中设一个childform 类型的变量,当用new childform()建立子窗体的时候用如下语句把子窗体"存起来":
this.child = new childform();
这样就可以通过this.child 来访问子窗体了.
另外觉得private void MainForm_BtnClick(object sender, EventArgs e)
{
}
没有什么实用的价值.
mainForm中两个button,分别为button1和button2
private void button1_Click(object sender, EventArgs e)
{
mdiForm3 temp = new mdiForm3();
button2.Click += new EventHandler(temp.button1_Click);
temp.Show();
}mdi窗体中的button如下:注意是public的
public void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("dddd");
}
以上程序在vs2005下測試通過。
个人意见,仅供参考