将数据从UserControl传递到另一个

时间:2012-07-17 20:20:02

标签: c# winforms

我有自己制作的表单和两个自定义UserControl。一个控件有一些按钮,每个按钮都将theire Tag属性设置为PointF数组。我有另一个具有ObservableCollection<PointF[]>的UserControl,我将其事件处理程序设置为在添加数据时绘制线条。这很好用如果我把数据点放在它自己的类上......只要确保它有效。

不,我的问题是,在一个表单中有这两个控件,如何在第一个控件中设置按钮的click事件,将数据点添加到第二个控件?

在我的解决方案中,这两个控件都在两个不同的项目中。并且这些控件的形式也在展示中,也在一个不同的项目中(它是解决方案的启动项目)

2 个答案:

答案 0 :(得分:2)

你可以在接收PointF数组的第二个usercontrol上添加一个公共方法,然后在这个方法中你可以将PointF添加到你的集合中。

编辑:处理第一个用户控件中的click事件

在第一个usercontrol中添加事件和所需的委托

public delegate void OnClickPointDataEvent(object sender, PointF[] data);
public event OnClickPointDataEvent ClickPointData;

然后form_load事件订阅usercontrol1事件

uc1.ClickPointData += new UserControl1.OnClickPointDataEvent(form_subscribe_event);

private void form_subscribe_event(object sender, PointF[] data)
{
    uc2.SomePublicMethod(data);
}

最后,在第一个usercontrol按钮内单击调用处理表单内的事件的代码

....
if(ClickPointData != null)
    ClickPointData(pointf_array);
...

答案 1 :(得分:2)

向第一个控件添加一个事件。

public event EventHandler<EventArgs> Control1ButtonClicked;
private void OnClicked()
{
    var handler = Control1ButtonClicked;
    if (handler != null)
    {
        handler(this, new EventArgs());
    }
}

private void Button1_Click(object sender, EventArgs e)
{
    OnClicked();     
}

将属性添加到第二个控件

public ObservableCollection<PointF[]> MyPoints{ get; set;};

然后在主应用程序中添加一个监听器

userControl1.Control1ButtonClicked += new EventHandler<EventArgs>(userControl1_Control1ButtonClicked);

void userControl1_Control1ButtonClicked()
{
    //Do Something to control 2
    userControl2.MyPoints.Add() = //Whatever
}