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 に答える