C# 将窗体声明为委托

C# 将窗体声明为委托,c#,winforms,delegates,C#,Winforms,Delegates,我的课程中有4种表格: 星型 UIForm1 UIForm2 调试窗体 我用StartForm启动程序,然后用户可以使用按钮启动UIForm1和UIForm2。还有另一个名为DebugForm的表单,其中有一个文本框,我将使用UIForm1和UIForm2时的所有错误都放在其中(异常等) 不,我想在StartForm中声明DebugForm,以便UIForm1和UIForm2都可以访问它。我怎么做?我尝试将其声明为公共,但无法访问: //in StartForm public DebugFo

我的课程中有4种表格:

  • 星型
  • UIForm1
  • UIForm2
  • 调试窗体
我用StartForm启动程序,然后用户可以使用按钮启动UIForm1和UIForm2。还有另一个名为DebugForm的表单,其中有一个文本框,我将使用UIForm1和UIForm2时的所有错误都放在其中(异常等)

不,我想在StartForm中声明DebugForm,以便UIForm1和UIForm2都可以访问它。我怎么做?我尝试将其声明为公共,但无法访问:

//in StartForm
public DebugForm dFrm = new DebugForm(); //Not working

//in UIForm1 or 2
//add a error to textbox
dFrm.textBox.Text += "ERROR NUMBER 1"; //Not working
dFrm.Show(); //Not working

我怀疑我必须用delegate关键字来完成它。如何做到这一点?

一个快速解决方法是在StartForm中声明DebugForm变量为:

//in StartForm
public static DebugForm dFrm = new DebugForm();
并将其用于其他形式,如:

StartForm.dFrm.textBox.Text += "ERROR NUMBER 1";
StartForm.dFrm.Show();
委托是指向一个方法的“指针”,因此它表示要分配给它的函数或多个方法。它不能用于表示对象

为什么不创建一个包含字符串对象(列表)的集合,然后在创建调试表单时,可以在文本框中清空它

在mainForm中创建集合并将其传递给UI1和UI2表单。然后,当您创建DebugForm时,您可以将其传递到那里并执行任何您喜欢的操作


您可以在可以分配此集合的每个表单中创建一个属性。

StartForm
中声明一个公共属性,它提供对
DebugForm

public class MainForm
{
    private DebugForm debugForm = new DebugForm();

    public DebugForm DebugForm
    {
        get { return this.debugForm; }
    }        
}
startForm.DebugForm.Show();
startForm.DebugForm.TextBox.Text += "Error";
然后您可以通过
StartForm.DebugForm

public class MainForm
{
    private DebugForm debugForm = new DebugForm();

    public DebugForm DebugForm
    {
        get { return this.debugForm; }
    }        
}
startForm.DebugForm.Show();
startForm.DebugForm.TextBox.Text += "Error";

在不向UIForms1、2公开StartForm的情况下,一种干净的方法是更改UIForm1和2的构造函数以执行操作

private Action<string> _showDebugForm;
public UIForm1(Action<string> showDebugForm)
{
 _showDebugForm = showDebugForm
}
在UIForm1中

当您创建UIForm1时,2会执行类似的操作

new UIForm1(str =>
{
    dFrm.textBox.Text += str;
    dFrm.Show();
 });

请包括更完整的代码示例(我们不知道这些代码是否都在一个方法中等),并提供比“不工作”更详细的信息。编译器错误消息将有助于。。。