我在这个解决方案中有两个项目:ProjectA和ProjectB。 ProjectA是主要的启动项目,并且引用了ProjectB。
ProjectA有一个名为MainForm.cs的文件,其中包含一个文本框和主UI。
ProjectB在Shapes.cs中有一个类,包含我们正在使用的特定结构。 Shapes.cs包含当用户更改该对象的某些文本时触发的事件。
我需要做的是捕获该文本并将MainForm.cs中的文本框设置为该文本。有没有办法可以做到这一点?基本上我没有看到Shapes.cs中的主要表单的任何引用。我想做这样的事情:
( Shape1.Parent as MainForm ).TextBox1.Text = Shape1.Name;
,假设用户键入一个存储在Shape1.Name中的字符串。我需要将其升级为主要形式。
我一直在寻找其他问题,我找到的最接近的线索是Matt Hamsmith对this question.的答案但是如果这是一个很好的方法我应该遵循,我不知道如何分配一个事件处理程序主要表单到单独的类中的事件。我将不胜感激任何帮助。
感谢。
答案 0 :(得分:2)
如果表单由子控件组成,则应该监听这些控件上的事件,而不是试图将其父级转换为特定类型的控件。这样做意味着您的控件只能在该表单上运行。它破坏了封装。
听取这样的事件:
public class MainForm : Form
{
Shape _shape1 = new Shape();
public MainForm()
{
InitializeComponent();
_shape.ShapeNameChanged += HandleShapeNameChanged;
}
public void HandleShapeNameChanged(object sender, ShapeChangeEventArgs e)
{
textBox1.Text = e.NewName;
}
}
public class Shape
{
public event EventHandler<ShapNameChangedEventArgs> ShapeNameChanged;
}
我已经把它留给了你: