2011-12-25 15 views
0
public partial class Form1 : Form 
{ 

    public disp(string strVal) 
    { 
        lbl1.text = strVal; 
     }  

    private void button1_Click(object sender, EventArgs e) 
      { 

      class1 cl = new class1; 
      cl.Show1("test",this); 

     } 

} 

----------------クラス------------をフォームの機能にアクセスする方法異なるクラスから

public class class1 

{ 
private Form frm1; 

    public void Show1(string xName , object xfrmObj) 
    { 
     frm1 = (form) xfrmObj; 
     frm1.disp(xName); // here I am getting error . 
    } 

} 

------------------------------------------/

ここクラスから 'disp'関数にアクセスしようとしていますが、オブジェクトとして 'form1'を渡しましたが、エラーが発生します。

エラーメッセージは

です

エラー3
「System.Windows.Forms.Form」「DISP」 とタイプの最初の引数を受け入れていない拡張メソッド「DISP」の定義が含まれていません「System.Windows.Forms.Form」でした (使用するディレクティブまたはアセンブリ参照がありませんか?)

この構文はvb.netで完璧です。

私を助けてください.....

ラジェッシュ。

答えて

4

Show1(xName,xfrmObj)メソッドでformにキャストする代わりに、frm1 = (Form1)xfrmObj;をキャストする必要があります。

編集: OPは、彼がいくつかの異なる形式で動作するためにこれを必要としているとコメントで述べています。 、その後、

public partial class Form1 : Form, ICanDisplay 
{ 
    public void disp(string strVal) 
    { //... 
    } 
} 

public partial class Form2 : Form, ICanDisplay 
{ 
    public void disp(string strVal) 
    { //... 
    } 
} 

public interface ICanDisplay 
{ 
    void disp(string strVal); 
} 

それはICanDisplayにキャストして、あなたの方法を変更します: あなたは、すべてのフォームがそうのように、同じInterfaceを実装することができます

public class class1 
{ 
private Form frm1; 

public void Show1(string xName , object xfrmObj) 
{ 
    frm1 = (ICanDisplay) xfrmObj; 
    frm1.disp(xName); 
} 

}

しかし、として@ Heinziは、Show1メソッドを次のように変更する必要があることに気付きました。

public void Show1(string xName, IDisplayForm xfrmObj) 
{ 
    xfrmObj.Disp(xName); 
} 

これにより、キャストはまったく必要ありません。次のステップは、に変数、関数、およびクラスの意味のある名前を選択することです。

+0

お返事ありがとうございました。 –

+0

よろしくお願いします。これがうまくいく場合は、この投稿をあなたの質問の回答としてマークしてください。 – Adam

+0

私は質問者の代わりに投票します;-) –

関連する問題