窗口间委托传值,困扰两天的问题,求解!

独孤侠客 2012-07-10 09:56:14
一个Form理解加入了一个自定义控件Netchart4,NetChart4里面有一个pictureBox;就这,我就想实现窗口NetChart4和Form的传值,用委托实现的。各位帮忙找找原因,我找了很久了。。。我新建两个窗口试验这样的委托没有问题,可是在这个程序中就是不行,求解!
首先在NetChart4中我建立委托事件:
namespace Demo.MyControler
{
public partial class NetChart4 : UserControl
{
public NetChart4()
{
InitializeComponent();

}
public delegate void ShowSelectedPoint(string str);
public event ShowSelectedPoint SelectedPoint;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (SelectedPoint != null)
SelectedPoint("500");
}
}
}
然后我在Form1中绑定方法,监听委托:
namespace Demo
{
public partial class Form1 : Form
{
NetChart4 netChart;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{

netChart = new NetChart4();
netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);
}
public void change(string str)
{
int a = 0;
int.TryParse(str, out a);
this.Location = new System.Drawing.Point(a, 600);
this.Refresh();
}
}

或者我尝试与另一个窗口DeveiceList传值也是不行,比如,我在DeveiceList中绑定方法如下:
namespace Demo.MyControler
{

public partial class DeviceList : UserControl
{
NetChart4 netChart4;
public DeviceList()
{
InitializeComponent();
netChart4 = new NetChart4();
netChart4.SelectedPoint+=new NetChart4.ShowSelectedPoint(selecedjpg);

}
private void DeviceList_Load(object sender, EventArgs e)
{
netChart4 = new NetChart4();
//监听事件
netChart4.SelectedPoint += new NetChart4.ShowSelectedPoint(change);

}
public void change(string str)
{
int a = 0;
int.TryParse(str, out a);
this.Location = new System.Drawing.Point(a, 600);
this.Refresh();
}
}
对此困扰良久,寻求高手们帮忙,或者一起探讨也行!
...全文
168 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
娜那 2012-09-12
  • 打赏
  • 举报
回复
这委托和事件也太难了吧
熙风 2012-07-10
  • 打赏
  • 举报
回复
netChart = new NetChart4();
netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);

你这是无效,,你这个控件是在窗体上面,,窗体和自定义控件已经加载完了,再去new一个给它加载事件有用么?

如果你NetChart4是动态加载的,然后加载事件说不定可以,,
NetChart4 netChart = new NetChart4();
netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);
this.Controls.Add(netChart);
独孤侠客 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 10 楼 的回复:

我调试发现,当鼠标点击pictureBox的时候,委托为null,不能触发委托传值,为什么呢?


那就是你netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);
这个事件挂载有问题
[/Quote]
的确问题在此,但是从来程序语句没错,难道是窗口的启动顺序问题?。。。。怎么会出现挂载不上呢。。
熙风 2012-07-10
  • 打赏
  • 举报
回复


[Quote=引用 10 楼 的回复:]

我调试发现,当鼠标点击pictureBox的时候,委托为null,不能触发委托传值,为什么呢?
[/Quote]

那就是你netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);
这个事件挂载有问题
独孤侠客 2012-07-10
  • 打赏
  • 举报
回复
我调试发现,当鼠标点击pictureBox的时候,委托为null,不能触发委托传值,为什么呢?
独孤侠客 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

委托还不太懂,楼主试试
将参数类型改为string->int
[/Quote]
谢谢,共同学习,跟那个没有关系
dd_zhouqian 2012-07-10
  • 打赏
  • 举报
回复
委托还不太懂,楼主试试
将参数类型改为string->int
独孤侠客 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

C# code
private void Form1_Load(object sender, EventArgs e)
{

netChart = new NetChart4();
netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);
netChart.Show();
}
[/Quote]
本来就是显示着的,就是form1里面的一个控件,用不用show()没区别吧
独孤侠客 2012-07-10
  • 打赏
  • 举报
回复
怎么才能吸引高手来解答呢。。。。天灵灵地灵灵,都来看看吧,告诉个解决办法啊。。。
这个程序里面还有一个委托,是不是两个委托有影响啊?
熙风 2012-07-10
  • 打赏
  • 举报
回复
 private void Form1_Load(object sender, EventArgs e)
{

netChart = new NetChart4();
netChart.SelectedPoint+=new NetChart4.ShowSelectedPoint(change);
netChart.Show();
}
独孤侠客 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你是点击了pictureBox1吗,如果不是,肯定触发不了,你调试下看看吧
[/Quote]
是啊,肯定点击了,我还专门试验了,点击是有效触发的,就是没有传值。。。调试的时候委托总是空。。
bdmh 2012-07-10
  • 打赏
  • 举报
回复
你是点击了pictureBox1吗,如果不是,肯定触发不了,你调试下看看吧

110,538

社区成员

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

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

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