将表单声明为委托

时间:2011-04-08 13:18:00

标签: c# winforms delegates

我的程序中有4个表单:

  • StartForm
  • UIForm1
  • UIForm2
  • DebugForm

我使用StartForm启动程序,然后用户可以使用按钮启动UIForm1和2.还有另一个名为DebugForm的表单,其中有一个textBox,我将所有错误都放在其中使用UIForm1和2(例外和等。)。

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

//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关键字。怎么可能这样做?

4 个答案:

答案 0 :(得分:1)

快速修复是将StartForm中的DebugForm变量声明为:

//in StartForm
public static DebugForm dFrm = new DebugForm();

并以其他形式使用它:

StartForm.dFrm.textBox.Text += "ERROR NUMBER 1";
StartForm.dFrm.Show();

答案 1 :(得分:1)

在没有将StartForm实际暴露给UIForms1,2的情况下执行此操作的干净方法是更改​​UIForm1和2的构造函数以执行操作。

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

并致电

 if(_showDebugForm!=null)
 {
     _showDebugForm("ERROR NUMBER 1");
 }

在UIForm1中

当你创建UIForm1时,2会做这样的事情

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

答案 2 :(得分:0)

委托是方法的“指针”,因此它表示正在分配的函数或多个方法。它不能用于表示对象。

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

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

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

答案 3 :(得分:0)

StartForm中声明可以访问DebugForm

的公共财产
public class MainForm
{
    private DebugForm debugForm = new DebugForm();

    public DebugForm DebugForm
    {
        get { return this.debugForm; }
    }        
}

然后,您可以通过DebugForm

访问StartForm.DebugForm
startForm.DebugForm.Show();
startForm.DebugForm.TextBox.Text += "Error";