如何在类中传递没有静态表单的表单引用

本文关键字:表单 静态 引用 | 更新日期: 2023-09-27 18:03:35

我的标题可能没有任何意义。由于我不知道如何表达,我将通过举一个例子把我的问题翻译成英语。(英语是我的第三语言)

所以基本上,我想在我的类中做到这一点:

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

但是你不能访问自定义表单中定义的属性/字段。例子:

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)

是问题在'如何调用'方法在toegang或它是别的东西。我不清楚?看来你是荷兰人,如果你想的话可以用荷兰语问这个问题。这是我的母语。

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

beheerToegang(ref yourformname);