1

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

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

public void beheerToegang(ref Form frm)
{    

}

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

public void beheerToegang(ref frmInkomsteBlad frm)
{    

}
4

2 回答 2

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;
  }
}

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

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;
}
于 2013-03-13T10:52:07.630 回答
1

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

public void beheerToegang(Form frm)

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

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

beheerToegang(ref yourformname);
于 2013-03-13T10:17:58.707 回答