C# 为什么我的Form1对象和实例化类的引用在当前上下文中不存在?

C# 为什么我的Form1对象和实例化类的引用在当前上下文中不存在?,c#,winforms,C#,Winforms,我是Windows窗体的新手,当Form1引用“form”抛出此错误时,我很难使此程序正常工作:“form”名称在当前上下文中不存在”,每次使用它时,实例化guess类的引用变量“guess”都会出现此错误:“每次使用都找不到类型或命名空间名称‘guess’(是否缺少using指令或程序集引用?)。我肯定我犯了一个简单的错误,但我就是搞不清楚。请提前感谢 猜谜课 using System; namespace GuessingGame { public class Guess { p

我是Windows窗体的新手,当Form1引用“form”抛出此错误时,我很难使此程序正常工作:“form”名称在当前上下文中不存在”,每次使用它时,实例化guess类的引用变量“guess”都会出现此错误:“每次使用都找不到类型或命名空间名称‘guess’(是否缺少using指令或程序集引用?)。我肯定我犯了一个简单的错误,但我就是搞不清楚。请提前感谢

猜谜课

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构造函数之前。