委托事件 窗体传值 我是想这样的一个效果A窗口 B窗口 C是一个类 A和B不是父子关系 在B窗口中修改C类中的一个参数,在C中以事件的形式 告诉A窗口 参数修改了 然后A窗口读取C类的参数。只想知道这个 委托事件是怎么写的 不需要别的方法。 谢谢大哥们 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class Class1 { public event MethodInvoker EditHandler; public Class1() { } public void Edit() { if (EditHandler != null) EditHandler(); } }//A c.EditHandler += new MethodInvoker(c_EditHandler); } void c_EditHandler() { MessageBox.Show("我被改了"); } //B c.Edit(); 我对模式没什么概念,基本思路我有。form1中:Class1 c=new Class1();private void Form1_Load(object sender, EventArgs e) { c.MyEvent+=new Class1.My(c_MyEvent);//绑定事件 } public void c_MyEvent(string s) { textBox1.Text = s; }Form2中:Class1 c = new Class1();private void textBox1_TextChanged(object sender, EventArgs e) { c.nn(textBox1.Text); }类Class1中:private string s; public string S { get { return s; } set { s = value; } } public delegate void My(string s); public event My MyEvent; public void nn(string sss) { S = sss; MyEvent(s);//这里出现未将对象引用的实例 }我认为可能是 New Class1()的时候又重新初始化了可能是我的写法有问题,求指教 两个窗口必须用同一个类,实例化只能一次,要是不传类参的话就要用静态声明如: Form1: public static Class1 c = new Class1(); Form2: Form1.c.Edit(); 类只是定义而已,怎么可能真正执行?你知道了A窗口、B窗口,那么还要知道C类的对象实例到底寄宿在哪里?一个空洞的“C类”,看不出它跟两个窗口的存在相对关系,就好象你跟空气打仗,没有可能写什么东西。 C类用来存放一个变量 当窗口B修改这个变量之后 在类中触发提示窗口A 变量被修改了。这个实例 我之前参考这写过,现在忘记咋写了。A和B属于并列的2个窗体,在3楼贴出了我的相关代码。求解 你这个真是让人烦恼!面向对象,就是说你要基于具体的对象实例来设计,而不是空洞的类型。就好象两个苹果,长得一模一样,味道也一样,可它们是两个独立的苹果,不要说成是一个。你new两个class有个什么用呢?先搞清楚这三个对象的声明期是怎样的(既如何产生、存在、直至销毁),才能不乱。 你new两个class有个什么用呢?先搞清楚这三个对象的声明期是怎样的 --> 你new两个Class1的实例有个什么用呢?先搞清楚这三个对象的生命期是怎样的不知道它们如何产生的,也就不知道A窗与B窗凭什么知道C实例(注意我这里A、B、C是指三个对象,而不是空洞的类型)。随便举个例子:public void MainProc(){ Form a=CreateFormA(); Form b=CreateFormB(); C c=CreateObjectC(); b.SetTargetObject(c); //告诉b该去设置哪一个具体对象的属性 c.ValueChanged += (sender,e) => {a.NotifyValueChanged(c); }; 怎样用js为dropdownlist赋值 再来一个问题,打印图片时怎样自动缩放? 初学者提问,老手可以做练手 如何让 ContextStripMenu 滚动?! 求一个正则表达式,高手请进 大家看看这段代码创建的IStoreDBO类 datagrid不能显示数据 com组件问题,大侠救命!!!! 【ArrayList之最大问题】高速添加删除导致索引错误问题!!!!!! DVD解码器,在线等候。100分 c#如何获取某个对象在内存的起始地址 mdi主体窗加了控件,如何让它不挡住子窗体
{
public event MethodInvoker EditHandler;
public Class1()
{
} public void Edit()
{
if (EditHandler != null) EditHandler();
}
}
//A
c.EditHandler += new MethodInvoker(c_EditHandler);
} void c_EditHandler()
{
MessageBox.Show("我被改了");
} //B
c.Edit();
form1中:Class1 c=new Class1();
private void Form1_Load(object sender, EventArgs e)
{
c.MyEvent+=new Class1.My(c_MyEvent);//绑定事件
}
public void c_MyEvent(string s)
{
textBox1.Text = s;
}
Form2中:Class1 c = new Class1();
private void textBox1_TextChanged(object sender, EventArgs e)
{
c.nn(textBox1.Text);
}
类Class1中:private string s;
public string S
{
get { return s; }
set { s = value; }
}
public delegate void My(string s);
public event My MyEvent;
public void nn(string sss)
{
S = sss;
MyEvent(s);//这里出现未将对象引用的实例
}
我认为可能是 New Class1()的时候又重新初始化了
可能是我的写法有问题,求指教
如:
Form1:
public static Class1 c = new Class1(); Form2:
Form1.c.Edit();
类只是定义而已,怎么可能真正执行?你知道了A窗口、B窗口,那么还要知道C类的对象实例到底寄宿在哪里?一个空洞的“C类”,看不出它跟两个窗口的存在相对关系,就好象你跟空气打仗,没有可能写什么东西。
你这个真是让人烦恼!面向对象,就是说你要基于具体的对象实例来设计,而不是空洞的类型。就好象两个苹果,长得一模一样,味道也一样,可它们是两个独立的苹果,不要说成是一个。你new两个class有个什么用呢?先搞清楚这三个对象的声明期是怎样的(既如何产生、存在、直至销毁),才能不乱。
--> 你new两个Class1的实例有个什么用呢?先搞清楚这三个对象的生命期是怎样的
不知道它们如何产生的,也就不知道A窗与B窗凭什么知道C实例(注意我这里A、B、C是指三个对象,而不是空洞的类型)。随便举个例子:public void MainProc()
{
Form a=CreateFormA();
Form b=CreateFormB();
C c=CreateObjectC();
b.SetTargetObject(c); //告诉b该去设置哪一个具体对象的属性
c.ValueChanged += (sender,e) => {a.NotifyValueChanged(c); };