1

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

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

在我的独奏中,这两个控件都在两个不同的项目中。并且这些控件显示的形式,也在不同的项目中(它是solution的启动项目)

4

2 回答 2

2

您可以在接收 PointF 数组的第二个用户控件上添加一个公共方法,然后在此方法中您可以将 PointF 添加到您的集合中。

编辑:处理第一个用户控件内的点击事件

在第一个用户控件中添加所需的事件和委托

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);
}

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

....
if(ClickPointData != null)
    ClickPointData(pointf_array);
...
于 2012-07-17T20:27:45.810 回答
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
}
于 2012-07-17T20:41:27.720 回答