Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从不同形式的类调用方法?_C#_.net_Winforms_Class_Methods - Fatal编程技术网

C#从不同形式的类调用方法?

C#从不同形式的类调用方法?,c#,.net,winforms,class,methods,C#,.net,Winforms,Class,Methods,好的,我在一个类中有一个方法,我试图从另一个类调用它 表格1: public void ChangeBack(Color clr) { this.BackColor = clr; } public static void ChangeBack(Color clr) { this.BackColor = clr; } 表格2: public void ChangBackColor_Click(object

好的,我在一个类中有一个方法,我试图从另一个类调用它

表格1:

    public void ChangeBack(Color clr)
    {
        this.BackColor = clr;
    }
    public static void ChangeBack(Color clr)
    {
        this.BackColor = clr;
    }
表格2:

    public void ChangBackColor_Click(object sender, EventArgs e)
    {
        if (ColorDialog.ShowDialog() == DialogResult.OK)
        {
            Form1.ChangeBack(ColorDialog.Color);
        }
    }
但是我需要使ChangeBack方法是静态的,以便能够调用它。因此:

表格1:

    public void ChangeBack(Color clr)
    {
        this.BackColor = clr;
    }
    public static void ChangeBack(Color clr)
    {
        this.BackColor = clr;
    }
但是我不能用“这个”,因为它是静态的,所以虚空不允许。我无法创建新的form1,因为它需要在两个窗口中运行


请帮忙!C

没错,您不能使方法成为静态的,也不能访问对象的实例


BackColor
更改为静态属性,或将方法更改为非静态方法

如果使用两个不同的WinForm窗口,则只需将引用从一个窗口传递到另一个窗口(通常使用构造函数)。例如:

var childForm = new ChildForm(this); // where this is your main WinForm

之后,您可以使用对主WinForm的引用来调用它的方法。

当您处理多个表单时,您需要传递对第二个表单的引用,以便它“知道”第一个表单。为此,您需要更改第二个表单的构造函数,并向该表单添加一个私有引用,如下所示:

class Form2 : Form
{
    //Variables
    private Form1 _ParentForm; //Add this here

    //Constructor
    public Form2(Form1 parentForm)
    {
        InitalizeComponent();
        _ParentForm = parentForm; //Add this here
    }
}
在主窗体上创建第二个窗体时,可以使用
this
将其自身的引用传递给新窗体:

class Form1 : Form
{

    public void ChangeBack(Color clr) //No longer needs to be static
    {
        this.BackColor = clr;
    }

    public void CreateSecondForm()
    {
        Form2 secondForm = new Form2(this);
        secondForm.Show();
    }
}
然后,您可以从第二个窗体调用父窗体(即Form1)上的任何函数,如下所示:

public void ChangBackColor_Click(object sender, EventArgs e)
{
    if (ColorDialog.ShowDialog() == DialogResult.OK)
    {
        //Access Form1's reference with _ParentForm instead of Form1
        _ParentForm.ChangeBack(ColorDialog.Color);
    }
}

哪一个是主要形式?我做了你说的,在colorDialog部分有一个错误。它在“\u ParentForm.ChangeBack(ColorDialog.Color)”下表示“表单不包含”ChangeBack的定义“@numdude好的,我已经解决了这个问题,将
Form2
类更改为将
\u ParentForm
作为
Form1
而不仅仅是
Form2
的构造函数,并将
Form2
的构造函数更改为相同的构造函数。对于遇到此问题的任何其他人,这里只是一个支持说明-确保方法/函数保护级别设置为“public”因为是私有的,第二种形式将无法访问它。