如何在类中没有静态表单的情况下传递Form引用?

时间:2013-03-13 10:10:54

标签: c# .net

我的标题可能没有任何意义。我将通过向您展示一个示例来尝试将我的问题翻译成英语,因为我不知道该怎么说。 (英语是我的第三语言)

所以基本上,我希望能够在我的课堂上做到这一点:

public void beheerToegang(ref Form frm)
{    

}

而不是(静态引用我的表单的实际名称)

public void beheerToegang(ref frmInkomsteBlad frm)
{    

}

2 个答案:

答案 0 :(得分:2)

好的,我看到了你遇到的问题的图片。

首先,您不需要在方法中添加ref(并考虑更好的命名)。它已被引用对象

public void beheerToegang(Form frm)
{    

}

接下来,您可以按照自定义表单的示例(未经测试的代码)使用该方法:

frmInkomsteBlad form1 = new frmInkomsteBlad();
beheerToegang(form1);

然后访问它:

public void beheerToegang(Form frm)
{    
  string formTitle = frm.Text;
}

但是,您无法以自定义格式frmInkomsteBlad访问已定义的属性/字段。例如:

public class frmInkomsteBlad : Form{
  public string CustomString{get;set;} // this property cannot be accessed
}

但是有一些方法可以解决这个问题,首先是使用类型转换:

public void beheerToegang(Form frm)
{   
  if(frm is frmInkomsteBlad){
    frmInkomsteBlad typeCastedForm = (frmInkomsteBlad)frm;
    string customString = typeCastedForm.CustomString;
  }
}

上面的例子是不好的做法,但很容易实现。如果您更关心更好的做法,请考虑使用interfaces。例如:

public interface ICustomForm{
  string Title{get;set;}
  string CustomString{get;set;}
  object CustomObject{get;set;}
}

在你的frmInkomsteBlad表格中实现它。

public class frmInkomsteBlad : Form, ICustomForm{
  public string Title{
    get{
     return this.Text;
    }
    set{
     this.Text = value;
    }
  }

  //other implementation here
}

然后你就可以使用它:

public void beheerToegang(ICustomForm frm)
{   
  string customString = frm.CustomString;
  string title = frm.Title;
  object customObject = frm.CustomObject;
}

答案 1 :(得分:1)

你能解释一下你的问题吗? 为什么使用关键字ref?表单是一个对象,所以如果你想操作它,你可以使用

public void beheerToegang(Form frm)

'如何调用'方法beheerToegang中的问题还是其他问题。我不清楚吗? 看来你是荷兰人,如果你愿意,你可以用荷兰语问这个问题。这是我的母语。

如果问题只是调用方法,那么您可以使用:

beheerToegang(ref yourformname);