gpt4 book ai didi

C# 从不同的表单类调用方法?

转载 作者:行者123 更新时间:2023-11-30 20:40:37 24 4
gpt4 key购买 nike

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

表格 1:

    public 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 static void ChangeBack(Color clr)
{
this.BackColor = clr;
}

但是我不能使用“this”。因为 void 不允许它,因为它是静态的。而且我无法创建新的 form1,因为它需要在两个窗口中整体运行。

请帮忙!C

最佳答案

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

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);
}
}

关于C# 从不同的表单类调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33193504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com