C# 为什么我的Form1对象和实例化类的引用在当前上下文中不存在?
我是Windows窗体的新手,当Form1引用“form”抛出此错误时,我很难使此程序正常工作:“form”名称在当前上下文中不存在”,每次使用它时,实例化guess类的引用变量“guess”都会出现此错误:“每次使用都找不到类型或命名空间名称‘guess’(是否缺少using指令或程序集引用?)。我肯定我犯了一个简单的错误,但我就是搞不清楚。请提前感谢 猜谜课C# 为什么我的Form1对象和实例化类的引用在当前上下文中不存在?,c#,winforms,C#,Winforms,我是Windows窗体的新手,当Form1引用“form”抛出此错误时,我很难使此程序正常工作:“form”名称在当前上下文中不存在”,每次使用它时,实例化guess类的引用变量“guess”都会出现此错误:“每次使用都找不到类型或命名空间名称‘guess’(是否缺少using指令或程序集引用?)。我肯定我犯了一个简单的错误,但我就是搞不清楚。请提前感谢 猜谜课 using System; namespace GuessingGame { public class Guess { p
using System;
namespace GuessingGame
{
public class Guess
{
private int guess;
private int guessCount;
private Random r = new Random();
private int number;
public int Guess { get; set; }
public int GuessCount { get; set; }
public int number { get; set; }
public Guess()
{
this.guessCount = 0;
number = r.Next(0, 101);
}
public Guess(int num)
{
this.guess = num;
this.guessCount++;
number = r.Next(0, 101);
}
public void addNumber(int num)
{
this.guess = num;
this.guessCount++;
}
public bool isHigher()
{
if (guess > number)
return true;
else
{
return false;
}
}
public bool isEqual()
{
if (guess == number)
return true;
else
return false;
}
public void reset()
{
number = r.Next(0, 101);
guess = 0;
guessCount = 0;
}
}
}
表格1.cs:
// Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GuessingGame
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
guess.reset();
txtBxEnterNumber.Text = "";
txtBxGuessCount = guess.GuessCount;
form.BackColor = System.Drawing.Color.Gray;
}
private void button3_Click(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void btnGuess_MouseClick(object sender, MouseEventArgs e)
{
string inValue;
int number;
while (int.TryParse(txtBxEnterNumber.Text, out number) == false)
{
MessageBox.Show("Enter an integer only");
txtBxEnterNumber.Text = "";
txtBxEnterNumber.Focus();
}
Guess guess = new Guess(number);
txtBxGuessCount.Text = guess.GuessCount;
if (guess.isEqual())
{
form.BackColor = System.Drawing.Color.Red;
btnReset.Focus();
}
else if (guess.isHigher())
{
form.BackColor = System.Drawing.Color.Blue;
txtBxEnterNumber.Text = "";
txtBxEnterNumber.Focus();
}
else
{
form.BackColor = System.Drawing.Color.Lime;
txtBxEnterNumber.Text = "";
txtBxEnterNumber.Focus();
}
}
}
}
最后是Program.cs,由于某种原因,它在我创建Windows窗体项目时没有自动创建,所以我自己创建了它。这可能是造成问题的原因
using System;
namespace GuessingGame
{
static class Program
{
static void main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
Application.Run(form);
Guess guess = new Guess();
}
}
}
这是因为您是在main()方法的上下文中创建它们的。类本身是一个完全不同的上下文。在Form1方法中,“this”指的是您所在的Form1实例。如果您希望Form1能够使用“guess”实例,则必须将其传入并以某种方式存储。请尝试以下操作: 大体上:
Guess guess = new Guess();
Form1 form = new Form1(guess);
在Form1类中:
private Guess guess;
public Form1(Guess guess)
{
InitializeComponent();
this.guess = guess;
}
private void button2_Click(object sender, EventArgs e)
{
this.guess.reset();
this.BackColor = System.Drawing.Color.Gray;
}
现在还不太清楚您想要实现什么。将示例简化为一个好的示例,并且非常具体地说明您希望代码做什么会有所帮助。也就是说,在
Form1
类中,您不需要form
变量(我想您正在尝试使用main()
方法)。只需使用this
。至于guess
,您显示的Form1
类中没有guess
字段,因此您可能只需要添加它。请改进问题。它应该是Main
而不是Main
,然后转到您的项目属性并从Windows窗体应用程序更改它(查找启动窗体)到类库,然后可以选择启动对象作为主要方法。(我相信,我最近没有这样做。)谢谢,这终于给了我Program.cs文件。我还要注意,这个问题不仅表明你不熟悉Windows窗体,还表明你不熟悉任何形式的面向对象编程。谢谢你的帮助。我对OOP很陌生。不幸的是,我在网上上课,我的老师没有回复我的电子邮件寻求帮助通常情况下,这个网站是我唯一的希望。我已经完成了这个程序,修复了你给我看的内容,也完成了其他评论员提到的在项目属性中设置启动对象的操作。但我仍然会遇到同样的错误。可能是我需要对Guess类或其他类使用语句吗?(我确实修正了Form1引用变量,修改了你的建议,并将我所有的引用都改成了这个。就像你说的。谢谢!如果你提到错误发生的那一行,回答这个问题会容易得多。哦,好的。在Program.cs的第19行,我定义了guess对象。还有Form1.cs的第15行和第17行,它是在我定义私有猜测引用并将猜测传递到Form1构造函数之前。