C#从不同形式的类调用方法?
好的,我在一个类中有一个方法,我试图从另一个类调用它 表格1: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
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”因为是私有的,第二种形式将无法访问它。