我目前正在全班学习。这可能是一个新手问题,但是考虑到我一直在谷歌搜索并且陷入一个圆圈,我想我需要一个指针。
问题是我试图创建一个实例,以便我可以通过在Winforms中单击按钮来使用Info和Liste的方法。但是,它告诉我
没有给出与所需参数相对应的参数 属于form1。
考虑到它的构造函数和所有元素,这是有道理的。
作为潜在的解决方法,它告诉我在Methods
类中使用以下代码:
public Methods()
{
}
我采用哪个构造函数,但是我对使用它有0想法。感谢您的帮助。
public partial class Main : Form
{
Methods Methods = new Methods(); // not working
public Main()
{
InitializeComponent();
Methods Methods = new Methods(this);
}
private void button1_Click(object sender, EventArgs e)
{
Methods.Info(); // not working
Methods.Liste(); // not working
}
}
public class Methods
{
int count = 0;
private Main mainForm;
public Methods(Main form1)
{
mainForm = form1;
}
public void Info()
{
Inventory.array[count] = Convert.ToInt32(mainForm.textBox2.Text) * Convert.ToInt32(mainForm.textBox3.Text);
count++;
}
public void Liste()
{
int sum = 0;
foreach (int i in Inventory.array)
{
sum += i;
}
mainForm.label5.Text = Convert.ToString(sum);
}
}
答案 0 :(得分:1)
Methods Methods = new Methods(this);
正在创建一个局部变量,该局部变量遮蔽了类中的字段。使用
this.Methods = new Methods(this);
相反。而且,您不应在字段或本地人中使用大写字母。
答案 1 :(得分:1)
您有很多错误。让我们逐步关注它们:
您有一个类型为Methods
的字段,该字段引用您的Methods
类的单个实例(通过坏的名称来表示课程)。为了创建该实例,您需要引用现有表单。但是,this
关键字在成员外部不存在。这就是编译器在您的字段声明中提出的要求。
您的构造函数中有一个 local 变量,名为Methods
,该变量隐藏该字段。因此,实际上您有该类的两个实例,一个在字段中,一个在cosntructor中定义。只需省略后者:
readonly Methods Methods;
public Main()
{
InitializeComponent();
this.Methods = new Methods(this);
}
private void button1_Click(object sender, EventArgs e)
{
Methods.Info(); // not working
Methods.Liste(); // not working
}
放在一边:您可以在构造函数中省略this
关键字:
Methods = new Methods(this)
代替
this.Methods = new Methods(this)
因为您所指代的符号很清楚。我只是添加了它以使其更加清晰。
最重要的是:Methods
对于一个类来说确实是个坏名字。而是选择一个名称来描述您的班级应该做什么。最好您看看naming-conventions。