我有个关于面向对象编程的问题:
假如有两个对象A和B:对象A有一个按钮。当触发该按钮事件后,会调用对象B实例的某方法。那应该怎么写这个程序最好?
假如有两个对象A和B:对象A有一个按钮。当触发该按钮事件后,会调用对象B实例的某方法。那应该怎么写这个程序最好?
解决方案 »
- 怎样把word文档导入到数据库,然后再从数据库导出生成word文档
- 很久不用的tabstrip控件在后台添加tab项问题,会的帮帮忙!谢谢
- 求一个sql的加标点符号的问题!
- 每月的工资表统计怎么做?100分
- DataGridView 的CellErrorTextNeeded事件问题
- 在论坛搜索框输入QQ会出现什么?
- C#里怎么取得sql通过用函数计算求和得到的值分别赋值给c#控件
- debug 标志 release不执行
- thread会每次自己结束吗
- w32.hllw.gaobot 我服你了!!! (我又来C#向大家请教了)
- 怎样编写IE浏览器插件
- winform如何保存在窗体(自定义控件)上的画图
class A
{
B b;
Button button1;
public A()
{
///
A.button1.Click+=new EventHandle(b.Function);
}class B
{
public void Funciton(object sender, EventArgs e)
{
///
}
}
{
//dosomething;
btn2_click(sender,e);
}
这样就也干了按钮2的事情了!
{
///
}
}这样classA有一个实例,classB有2个实例,那么按classA则怎么知道调用classB中的哪个实例??
我就不想这样做,这样做就必须有B实例。
我的意思是:两个对象是存在一定关系的~对象A发生某事件,可以控制对象B~但是不是实例B。
就如sp1234所说的,这也得看A和B窗口之间是什么关系,才能决定该如何实现,这里就存在三种情况
1. A包含B的对象
public class A : Form
{
private B b;
public A()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
// 直接调用b的close方法
b.Close();
}
} public class B : Form
{
public B()
{
InitializeComponent();
}
}2. B中包含A的对象
public class A : Form
{
// 定义button按下后发出的事件,供B接收
public delegate void ButtonClick(object sender, EventArgs e);
public event ButtonClick Click; public A()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
// 触发Click消息
if (Click != null)
Click(sender, e);
}
} public class B : Form
{
private A a; public B()
{
InitializeComponent(); // 注册A的Click事件
a.Click += new A.ButtonClick(a_Click);
} void a_Click(object sender, EventArgs e)
{
this.Close();
}
}3. A和B互不包含
这时我们需要使用一个中间类C来实现两个Form类的关联
public class A : Form
{
public A()
{
InitializeComponent();
} public void button1_Click(object sender, EventArgs e)
{
C.Instance.HandleAButtonClick();
}
} public class B : Form
{
public B()
{
InitializeComponent(); C.Instance.Click += new C.ButtonClick(c_Click);
} void c_Click(object sender, EventArgs e)
{
this.Close();
}
} public class C
{
public delegate void ButtonClick(object sender, EventArgs e);
public event ButtonClick Click; public void HandleAButtonClick()
{
if (Click != null)
Click(null, EventArgs.Empty);
} public static C Instance = new C();
}