我在这个解决方案中有两个项目:ProjectA和ProjectB。项目a是主要的启动项目,并参考了项目B。
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对这个问题的回答。但是,如果这是一种我应该遵循的好方法,我不知道如何将主窗体中的事件处理程序分配给单独类中的事件。如果有任何帮助,我将不胜感激。
谢谢。
如果窗体由子控件组成,则它应该侦听这些控件上的事件,而不是控件试图将其父控件强制转换为特定类型。这样做意味着您的控件只能在该Form上工作。它破坏了封装。
听这样一个事件:
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;
}
我把它留给你:
- 定义ShapeNameChangedEventArgs对象以包含您希望它处于的任何状态
- 当控件上的某些内容发生更改时调用事件
祝你好运!