2013-03-22 74 views
2

我的主要Form1.cs的如下呼叫從另一個類主類的公共方法

public partial class Form1: Form 
    { 
     Test _Test = new Test() 

     public Form1() 
     { 
      InitializeComponent(); 
      _Test._TestMethod(); 
     } 

     public void _MainPublicMethod(string _Message, string _Text) 
     { 
      MessageBox.Show(_Message); 
      TextBox1.Text = Text; 
     } 
    } 

test.cs中如下

class Test 
{ 
    Form1 _Form1 = new Form1(); 

    public void _TestMethod() 
    { 
     _Form1._MainPublicMethod("Test Message", "Test Text"); 
    } 
} 

當我調試我的項目,代碼不起作用。

預先感謝您。

+1

當調試我的項目,代碼不工作,我們怎麼知道什麼行不通 – TalentTuner 2013-03-22 13:11:11

+1

輸入錯誤Form1中_Form1 =新Form1的(); – 2013-03-22 13:11:19

+1

請務必在您的描述中包含錯誤消息。 – 2013-03-22 13:12:51

回答

2

你的代碼顯示了一個共同的誤解(或缺乏的基本原則OOP理解)。
在form1中,當您的代碼調用_Test._TestMethod()時,您正在調用一個方法,該方法屬於在您的form1中定義並初始化的類Test的實例。反過來,該實例嘗試調用類Form1中定義的_MainPublicMethod方法。但是,因爲調用該方法(實例方法,而不是一個靜態方法),你需要Form1的一個實例,您聲明並初始化Form1中

的另一個實例

您與Form1類打開的兩個實例結束和該調用由Form1的第二個實例解析,而不是來自最初調用_TestMethod的實例。

爲避免此問題,您需要將引用傳遞給調用Test_Method的Form1的實例,並在Test中使用該實例來回調公用方法。

所以,當調用Test_Method通過Form1中

的當前實例
public Form1() 
    { 
     InitializeComponent(); 
     _Test._TestMethod(this); 
    } 

和test.cs中

class Test 
{ 
    Form1 _frm = null; 

    public void _TestMethod(Form1 f) 
    { 
     _frm = f; 
     _frm._MainPublicMethod("Test Message", "Test Text"); 
    } 
} 
2

您可以修改此代碼,添加括號()

Form1 _Form1 = new Form1(); 
+0

謝謝,但是當我編寫代碼示例時,那是我的語法錯誤。我編輯過。抱歉。 – Kerberos 2013-03-22 13:36:52

+0

我很高興爲您提供Kerberos幫助 – 2013-03-22 13:47:36

2

我猜你想失主的形式,而不是一個新的mainpublicmethod所有者表單的實例。 這樣的:

public partial class Form1: Form 
{ 
    Test _Test = new Test() 

    public GrabGames() 
    { 
     InitializeComponent(); 
     _Test._TestMethod(this); //pass this form to the other form 
    } 

    public void _MainPublicMethod(string _Message, string _Text) 
    { 
     MessageBox.Show(Message); 
     TextBox1.Text = Text; 
    } 
} 

class Test 
{ 
    public void _TestMethod(Form1 owner) 
    { 
     //call the main public method on the calling/owner form 
     owner._MainPublicMethod("Test Message", "Test Text"); 
    } 
}