2013-03-22 83 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"); 
    } 
}