C# Can';t在Button1_Click()中使用Form1()中声明的变量
我正在学习C#,在其他语言中遇到了一个非常简单的问题,这让我很生气。。。我肯定错过了一些显而易见的东西,但经过几个小时的寻找和尝试,我终于找到了答案:p 我正在制作一个模拟蜂巢管理的程序。 在Form1()声明中,我初始化了两个变量,一个是Worker对象数组,另一个是包含Worker对象数组的Queen对象:C# Can';t在Button1_Click()中使用Form1()中声明的变量,c#,visual-studio,scope,C#,Visual Studio,Scope,我正在学习C#,在其他语言中遇到了一个非常简单的问题,这让我很生气。。。我肯定错过了一些显而易见的东西,但经过几个小时的寻找和尝试,我终于找到了答案:p 我正在制作一个模拟蜂巢管理的程序。 在Form1()声明中,我初始化了两个变量,一个是Worker对象数组,另一个是包含Worker对象数组的Queen对象: public Form1() { InitializeComponent(); Worker[] workers = new Worker[4];
public Form1()
{
InitializeComponent();
Worker[] workers = new Worker[4];
workers[0] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing" });
workers[1] = new Worker(new string[] { "Egg Care", "Baby Bee Tutoring" });
workers[2] = new Worker(new string[] { "Hive Maintenance", "Sting Patrol" });
workers[3] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing", "Egg Care", "Baby Bee Tutoring", "Hive Maintenance", "Sting Patrol" });
Queen queen = new Queen(workers);
}
接下来,使用Form1()中声明的Queen对象,使用我的“Button1”将工作分配给蜜蜂。
显然,它不在同一范围内,因为“queen”是在Form1()中声明的。
因此,我在这段代码中得到一个错误:
private void button1_Click(object sender, EventArgs e)
{
if(***queen***.AssignWork(workerBeeJob.Text, (int)shifts.Value))
{
MessageBox.Show("The job '" + workerBeeJob.Text + "` will be done in");
}
“实际上下文中不存在名称“queen”
如果我试图实例化类范围内的Queen对象(仅使用“Queen Queen;”…),我不能向他传递工作者数组,也不能使用她,因为她的工作者数组为null。
如果我尝试实例化一个Worker数组,它似乎可以创建他(“Worker[]workers=New Worker[4];”),但不能实例化他的值(“workers[0]=…”),此时,我所有的代码都用红色下划线很好地加了线,而相同的代码在Form1()方法中就像一个符咒
以下是问题:
- 如果不能在其他方法中使用Form1()中的组件,为什么必须初始化它们
- 如果我直接初始化Form1类中的Workers数组,为什么会出现大量错误
- 显然,如何在事件侦听器中使用我的Queen和她的Worker数组
public class Form1: Form
{
private Queen _queen;
public Form1()
{
InitializeComponent();
Worker[] workers = new Worker[4];
workers[0] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing" });
workers[1] = new Worker(new string[] { "Egg Care", "Baby Bee Tutoring" });
workers[2] = new Worker(new string[] { "Hive Maintenance", "Sting Patrol" });
workers[3] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing", "Egg Care", "Baby Bee Tutoring", "Hive Maintenance", "Sting Patrol" });
_queen = new Queen(workers);
}
private void button1_Click(object sender, EventArgs e)
{
if(_queen.AssignWork(workerBeeJob.Text, (int)shifts.Value))
{
MessageBox.Show("The job '" + workerBeeJob.Text + "` will be done in");
}
}
}
正如您所看到的,我会在字段前面加上\uu
。这不是必需的,但它提高了可读性。这样我就知道我是在处理一个领域,而不是一个本地领域
>>如果不能在其他方法中使用Form1()中的组件,为什么必须初始化它们
初始化组件()
在Form1.designer.cs
文件中定义,并由表单设计器生成。不能在分部类中定义两个(相同签名)构造函数。因此,他们实现了一种方法,对控件进行初始化。控件在InitializeComponent之前不可访问
>>如果我直接初始化Form1类中的Workers数组,为什么会出现大量错误 不能直接在类中添加可执行代码。它需要位于方法/属性中,显然,我如何在事件侦听器中使用我的Queen和她的Worker数组 您将queen变量定义为局部变量。这意味着当它超出范围时,它将不再可用。您需要将queen变量定义为字段
public class Form1: Form
{
private Queen _queen;
public Form1()
{
InitializeComponent();
Worker[] workers = new Worker[4];
workers[0] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing" });
workers[1] = new Worker(new string[] { "Egg Care", "Baby Bee Tutoring" });
workers[2] = new Worker(new string[] { "Hive Maintenance", "Sting Patrol" });
workers[3] = new Worker(new string[] { "Nectar Collector", "Honey Manufacturing", "Egg Care", "Baby Bee Tutoring", "Hive Maintenance", "Sting Patrol" });
_queen = new Queen(workers);
}
private void button1_Click(object sender, EventArgs e)
{
if(_queen.AssignWork(workerBeeJob.Text, (int)shifts.Value))
{
MessageBox.Show("The job '" + workerBeeJob.Text + "` will be done in");
}
}
}
正如您所看到的,我会在字段前面加上\uu
。这不是必需的,但它提高了可读性。这样我就知道我是在处理一个领域,而不是一个本地领域
>>如果不能在其他方法中使用Form1()中的组件,为什么必须初始化它们
初始化组件()
在Form1.designer.cs
文件中定义,并由表单设计器生成。不能在分部类中定义两个(相同签名)构造函数。因此,他们实现了一种方法,对控件进行初始化。控件在InitializeComponent之前不可访问
>>如果我直接初始化Form1类中的Workers数组,为什么会出现大量错误
不能直接在类中添加可执行代码。它需要位于方法/属性中,因为该变量是在构造函数
public Form1()的范围内定义的,因此只能在那里使用。在外部声明它以给它一个全局范围。因为该变量是在构造函数public Form1()
的范围内定义的,因此只能在那里使用。在外部声明以提供全局范围。感谢您的快速回复。正如我所说,我已经尝试使用:public分部类Form1:Form{Queen Queen;
在全局范围内实例化,但由于我的Worker[]为null,所以它不起作用。我无法实例化他,而我的所有代码都会出错……哈!好了!我在Form1()中创建了Queen的新实例而不是使用全局类。感谢您回答我的所有问题!祝您愉快:)感谢您的快速回复。正如我所说,我已经尝试使用:public partial class Form1:Form{Queen Queen;
在全局范围内实例化,但自从我的工作人员[]之后,它就不起作用了是null。我不能实例化他,否则我的代码都会出错…哈!好的,明白了!我在Form1()中创建了Queen的一个新实例,而不是使用全局实例。感谢您回答我的所有问题!祝您愉快:)