两个form传值,如何用委托来实现?

yymao2005 2010-01-09 10:11:06
form1 上有
butoon1用来弹出form2
picturebox1 用来放图片
form2 上有
listbox1用来存储图片列表

我现在调用listbox1.indexChange();事件如何能让form1中的picturebox1.image更新呢?

我知道要在form2写了个委托,但不清楚该在哪里引用委托,来实现更换图片的功能?



希望大侠能给一个详细的说明过程,告诉我 哪个事件调用了委托,因为我对委托的理解还不是很清楚。
...全文
466 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wartim 2010-01-09
  • 打赏
  • 举报
回复
event封装了委托

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication284
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

ShowMessageEvent += new Action<string>(Form1_ShowMessageEvent);
ShowMessageEvent += new Action<string>(Form1_ShowMessageEvent2);

ShowMessage.Invoke("A");
}

void Form1_ShowMessageEvent(string obj)
{
MessageBox.Show(obj);
}

void Form1_ShowMessageEvent2(string obj)
{
MessageBox.Show(obj+obj);
}

Action<String> ShowMessage = null;

event Action<String> ShowMessageEvent
{
add
{
ShowMessage += value;
}
remove
{
ShowMessage -= value;
}
}
}
}
cuike519 2010-01-09
  • 打赏
  • 举报
回复
委托可以理解为方法的抽象或者方法的接口(规范)。

定义好委托就定义好了一类方法,这些方法具有相同的签名,委托也是一个类,也可以实例化,委托也可以被调用,调用委托的时候,委托会将调用请求转发给实例化这个委托的方法上,理解了这些就比较容易实现了。
hnjhjzyyxgs 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yymao2005 的回复:]
Form1.myevent += new Form1.mydelegate(fm2_myevent);
这句话我也不太明白是什么意思,麻烦解释下。
[/Quote]
myevent 注册一个事件
平庸人生 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yymao2005 的回复:]
Form1.myevent += new Form1.mydelegate(fm2_myevent);
这句话我也不太明白是什么意思,麻烦解释下。
[/Quote]
订阅一个事件的意思
hnjhjzyyxgs 2010-01-09
  • 打赏
  • 举报
回复
Event它封装了委托类型的变量,使得:在类的内部,不管你声明它是public还是protected,它总是private的。在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同。
平庸人生 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yymao2005 的回复:]
public delegate void mydelegate(string text);//定义一个委托
public static event mydelegate myevent;


请问public static event mydelegate myevent; event是什么意思?
[/Quote]
event 是事件的意思
yymao2005 2010-01-09
  • 打赏
  • 举报
回复
Form1.myevent += new Form1.mydelegate(fm2_myevent);
这句话我也不太明白是什么意思,麻烦解释下。
yymao2005 2010-01-09
  • 打赏
  • 举报
回复
public delegate void mydelegate(string text);//定义一个委托
public static event mydelegate myevent;


请问public static event mydelegate myevent; event是什么意思?
hhc123 2010-01-09
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
namespace 事件委托2
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
Form1.myevent += new Form1.mydelegate(fm2_myevent);

}
void fm2_myevent(string str)
{

this.listBox1.Items.Add(str);

}

private void Form2_Load(object sender, EventArgs e)
{

}
private void Form2_Click(object sender, System.EventArgs e)
{

MessageBox.Show("大家好");
}

private void SDSJ_Shown(object sender, EventArgs e)
{
MessageBox.Show("你好");
}
private void Form2_LocationChanged(object sender, EventArgs e)
{

}
}
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 事件委托2
{
public partial class Form1 : Form
{
Form2 frm = new Form2();
public Form1()
{
InitializeComponent();

frm.Show();
frm.Hide();
}
public delegate void mydelegate(string text);//定义一个委托
public static event mydelegate myevent;


private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (myevent != null)
{
myevent(this.listBox1.SelectedItem.ToString());

}
}

private void button1_Click(object sender, EventArgs e)
{
frm.Show();
}
}
}

yymao2005 2010-01-09
  • 打赏
  • 举报
回复
经过大家提点,我做了一个简单的委托传值的实例,就是通过点击form2上的button1,来将form2信息,显示在form1的label1上。
namespace 委托
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Form2 f2 = new Form2();
f2.Show();
f2.WriteLabel += new Form2.writeLabel(labelWrite);
}
//private void button1_Click(object sender, EventArgs e)
//{

//}
private void labelWrite(string s)
{
label1.Text = s;
}
}
}


namespace 委托
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public delegate void writeLabel(string s);
public writeLabel WriteLabel;
private void button1_Click(object sender, EventArgs e)
{
this.WriteLabel("form2信息");
}
}
}
wuyq11 2010-01-09
  • 打赏
  • 举报
回复
Form2 f2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
f2.MyA+= new Form2.AA(B);
f2.Show();
}
void B(string str){}

public delegate void AA(string str);
public event AA MyA;
private void button1_Click(object sender, EventArgs e)
{
this.MyA();
}
http://topic.csdn.net/u/20100106/20/e9697297-75f9-4450-aaa9-da0da416cf41.html
yymao2005 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hhc123 的回复:]

{publicpartialclass Form1 : Form
{
Form2 frm=new Form2();public Form1()
{
InitializeComponent();

frm.Show();
frm.Hide();
}publicdelegatevoid mydelegate(string text);//定义一个委托
publicstaticevent mydelegate myevent;
privatevoid listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{if (myevent!=null)
{
myevent(this.listBox1.SelectedItem.ToString());

}
}privatevoid button1_Click(object sender, EventArgs e)
{
frm.Show();
}
}
}
[/Quote]

myevent(this.listBox1.SelectedItem.ToString());
似乎不应该出现在form1里吧,这里面的this应该是form1吧? 而form1里面没有listbox1

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧