从另一个类文件访问MainForm

时间:2014-11-11 10:05:45

标签: c# class

我有这个MainForm类:

namespace homework_001{

public partial class MainForm : Form
{
    public MainForm()
    {InitializeComponent();}

    public string Change
    {
        get{ return label.Text;}
        set{ label.Text = value;}
    }

     void ButtonClick(object sender, EventArgs e)
    {
        Test a = new Test();
        a.changer();


    }
}}

我有这堂课:

namespace homework_001{

public class Test
{       
    private MainForm form = new MainForm ();
    public void changer(){
    form.Change = "qqqqq!";
    }
}}

所需的工作流程是按下按钮上的标签/文字。 它会编译,但按下按钮后没有任何反应。

可能是什么问题?

4 个答案:

答案 0 :(得分:3)

发生的事情是您展示的表单与类Test中的表单不同。

为了使事情有效,您应该以这种方式将表单传递给类Test

public class Test
{       
    private MainForm form;
    public Test(MainForm f)
    {
        this.form=f;
    }
    public void changer(){
    form.Change = "qqqqq!";
    }
}}

并在您的主要表单中执行此操作:

public partial class MainForm : Form
{
    public MainForm()
    {InitializeComponent();}

    public string Change
    {
        get{ return label.Text;}
        set{ label.Text = value;}
    }

     void ButtonClick(object sender, EventArgs e)
    {
        Test a = new Test(this);
        a.changer();


    }
}}

答案 1 :(得分:1)

您正在创建另一个MainForm对象,该对象与屏幕上实际显示的对象不同。要处理同一个对象,您需要将其传递给Test类,如下所示:

Test a = new Test(this);   // "this" is the MainForm object you want to work with
a.changer();

这将give Test class a reference MainForm对象。

现在,您需要在Test中使用一个参数创建constructor,并将收到的引用存储在Test private MainForm form中的表单对象中领域。你不应该有这样的麻烦。

答案 2 :(得分:1)

完成创建主窗体的新对象..相反。制作字符串Change public and static 并从Mainform.Change="some text";

等测试类更改它

答案 3 :(得分:-1)

更改下面的代码:

 void ButtonClick(object sender, EventArgs e)
    {
        Test a = new Test();
        a.changer(ref this);


    }

您通过引用将表单对象传递给函数并更改了

 public class Test
    {       
       public void changer(ref MainForm form){
        form.Change = "qqqqq!";
        }
    }

请参阅此链接Passing Reference-Type Parameters (C# Programming Guide)