我有自己制作的表单和两个自定义UserControl
。一个控件有一些按钮,每个按钮都将theire Tag
属性设置为PointF
数组。我有另一个具有ObservableCollection<PointF[]>
的UserControl,我将其事件处理程序设置为在添加数据时绘制线条。这很好用如果我把数据点放在它自己的类上......只要确保它有效。
不,我的问题是,在一个表单中有这两个控件,如何在第一个控件中设置按钮的click事件,将数据点添加到第二个控件?
在我的解决方案中,这两个控件都在两个不同的项目中。并且这些控件的形式也在展示中,也在一个不同的项目中(它是解决方案的启动项目)
答案 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
}