从另一个类文件访问MainForm

本文关键字:访问 MainForm 文件 另一个 | 更新日期: 2023-09-27 18:29:56

我有这个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!";
    }
}}

所需的工作流程是更改按下按钮时的标签/文本。它编译了,但在我按下按钮后什么也没发生。

可能是什么问题?

从另一个类文件访问MainForm

所显示的表单与类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();

    }
}}

创建了一个主窗体的新对象。使字符串Change public and static并将其从类似Mainform.Change="some text"; 的测试类更改为

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

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

这将为Test类提供对MainForm对象的引用。

现在,您需要在Test中创建一个带有一个参数的构造函数,并将接收到的对表单对象的引用存储在Testprivate MainForm form字段中。你做那件事不应该有任何麻烦。

更改以下代码:

 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!";
        }
    }

请参阅此链接传递参考类型参数(C#编程指南)