我的标题可能没有任何意义。我将通过向您展示一个示例来尝试将我的问题翻译成英语,因为我不知道如何措辞。(英语是我的第三语言)
所以基本上,我希望能够在我的课堂上做到这一点:
public void beheerToegang(ref Form frm)
{
}
而不是这个(静态引用我的表单的实际名称):
public void beheerToegang(ref frmInkomsteBlad frm)
{
}
好的,我看到有关您遇到的问题的图片。
首先,您不需要在方法中添加 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;
}
}
上面的例子是不好的做法,但很容易实现。如果您更关心更好的实践,请考虑改用接口。例子:
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;
}
你能解释一下你的问题吗?为什么要使用关键字 ref?表单是一个对象,所以如果你想操作它,你可以使用
public void beheerToegang(Form frm)
问题是“如何调用”方法 beheerToegang 还是其他问题。我不清楚吗?看来您是荷兰人,如果您愿意,可以用荷兰语提问。这是我的母语。
如果问题只是调用该方法,那么您可以使用:
beheerToegang(ref yourformname);