如何从单独项目中的类中访问MainForm



我在这个解决方案中有两个项目: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;
}

我把它留给你:

  1. 定义ShapeNameChangedEventArgs对象以包含您希望它处于的任何状态
  2. 当控件上的某些内容发生更改时调用事件

祝你好运!

相关内容

  • 没有找到相关文章

最新更新