C# 每当我的函数试图在表单构造函数中执行时,它只会循环到前面的语句
我是C#的新手,我正在开发一个表单应用程序。。。这有点像一场游戏。每当构造函数执行函数时,它只会导致构造函数再次运行!以下是构造函数:C# 每当我的函数试图在表单构造函数中执行时,它只会循环到前面的语句,c#,forms,C#,Forms,我是C#的新手,我正在开发一个表单应用程序。。。这有点像一场游戏。每当构造函数执行函数时,它只会导致构造函数再次运行!以下是构造函数: public Form1() { InitializeComponent(); MessageBox.Show("You get 1 cookie for logging in!"); setScore(); score = Convert.ToInt32(setScr) + 1;
public Form1()
{
InitializeComponent();
MessageBox.Show("You get 1 cookie for logging in!");
setScore();
score = Convert.ToInt32(setScr) + 1;
label2.Text = score.ToString();
setProgressBar(CheckMP());
timer1.Interval = 1500;
timer1.Start();
readAndSetAchievements(); // THIS IS THE FUNCTION THAT
//CAUSES THE CONSTRUCTOR TO LOOP!!!
}
以下是函数:
public void readAndSetAchievements()
{
Achievements ach1 = new Achievements(); // ACHIEVEMENTS IS ANOTHER FORM THAT I
// AM CREATING AN INSTANCE OF BECAUSE I
// WANT TO USE VARIABLES AND FUNCTIONS
// FROM IT
using (StreamReader ar = new StreamReader("achievements.txt"))
{
achCheckStr[0] = ar.ReadLine();
achCheckStr[1] = ar.ReadLine();
if (achCheckStr[0] == ach1.ach1_StillBurning)
{
ach1.setAchievements(1);
}
else if (achCheckStr[1] == ach1.ach2_Faster)
{
ach1.setAchievements(2);
}
}
}
请有人帮忙。。。告诉我我错在哪里(我想这是因为我试图利用课堂上的成绩,但我不知道如何做,否则)。。。提前感谢!:)
以下是课堂上的全部成绩:
public partial class Achievements : Form
{
Form1 cha = new Form1();
public string ach1_StillBurning = "ach1_StillBurning.jpg";
public string ach2_Faster = "ach2_Faster.jpg";
public Achievements()
{
InitializeComponent();
}
public void setAchievements(int a)
{
using (StreamWriter aw = new StreamWriter("achievements.txt"))
{
switch (a)
{
case 1:
aw.WriteLine(ach1_StillBurning);
pictureBox1.Image = Image.FromFile(ach1_StillBurning);
break;
case 2:
aw.WriteLine(ach2_Faster);
pictureBox1.Image = Image.FromFile(ach2_Faster);
break;
}
}
}
private void Achievements_Load(object sender, EventArgs e)
{
cha.readAndSetAchievements();
}
}
给你们!:) 好吧,这就是我想到的。我不得不做一些假设,因为在阅读代码时,有些东西没有意义。我注意到了这些 编辑:请记住,我没有实际测试这段代码,因为我没有创建
Timer1
对象。您应该只需要进行最小的更改(如果有)
以下是Form1的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MessageBox.Show("You get 1 cookie for logging in!");
setScore();
score = Convert.ToInt32(setScr) + 1;
label2.Text = score.ToString();
setProgressBar(CheckMP());
timer1.Interval = 1500;
timer1.Start();
//Assuming this is the first use of the Achievements object.
Achievements.AchievementsFile = "achievements.txt";
}
}
在另一个文件中,这是成就表
private partial class AchievementsForm : Form
{
public AchievementsForm()
{
InitializeComponent();
}
private void Achievements_Load(object sender, EventArgs e)
{
IEnumerable<string> allAchievements = Achievements.ReadAchievements();
//Do stuff with the achievements
}
}
私有部分类实现表单:表单
{
公共成就表格()
{
初始化组件();
}
私有void\u加载(对象发送方、事件参数e)
{
IEnumerable AllAchievents=成就。readAchievents();
//用成绩做事
}
}
在另一个单独的文件中,这是新的成就类。这就是我所说的将功能移出表单的意思
public static class Achievements
{
private static string _stillBurning = "ach1_StillBurning.jpg";
private static string _faster = "ach2_Faster.jpg";
public static string AchievementsFile { get; set; }
public static Image SetAchievementFromAchievementCode(int a)
{
Image answer;
using (StreamWriter aw = new StreamWriter(Achievements.AchievementsFile))
{
switch (a)
{
case 1:
aw.WriteLine(_stillBurning);
answer = Image.FromFile(ach1_StillBurning);
break;
case 2:
aw.WriteLine(_faster);
answer = Image.FromFile(ach2_Faster);
break;
}
}
return answer;
}
public static IEnumerable<string> ReadAchievements()
{
List<string> answer = new List<string>();
using (StreamReader ar = new StreamReader(Achievements.AchievementsFile))
{
while (!ar.EndOfStream)
answer.Add(ar.ReadLine());
}
return answer;
}
}
公共静态课堂成绩
{
私有静态字符串\u stillBurning=“ach1\u stillBurning.jpg”;
私有静态字符串\u faster=“ach2\u faster.jpg”;
公共静态字符串实现文件{get;set;}
公共静态映像设置实现格式实现代码(INTA)
{
图像应答;
使用(StreamWriter aw=新的StreamWriter(aclements.aclementsfile))
{
开关(a)
{
案例1:
aw.WriteLine(_stillBurning);
答案=Image.FromFile(ach1\u StillBurning);
打破
案例2:
aw.WriteLine(更快);
答案=Image.FromFile(ach2\u更快);
打破
}
}
返回答案;
}
公共静态IEnumerable可读成就()
{
列表答案=新列表();
使用(StreamReader ar=新的StreamReader(acgressions.AchievementsFile))
{
而(!ar.EndOfStream)
答案。添加(ar.ReadLine());
}
返回答案;
}
}
我在阅读代码时注意到,您基本上具有这种逻辑(或类似逻辑)
调用一个函数来读取和设置成就,它调用了一个函数
阅读成就,然后循环调用相同的函数
再说一遍
我已经分为一个阅读和一组。setAcreacementFromachieveCode
函数获取您以前使用的同一个整数,将其写入同一个文件,然后返回一个图像
,您可以随意使用该图像。readAcgressions()
方法将为您提供文件中所有成就的完整列表
我知道这有点过分了,但希望能有所帮助。还有,你知道什么。。。现在是午餐时间。显示
成就的构造函数
。显示计时器。勾选计时器1的事件
这里是成就的第一行:Form1 cha=new Form1()代码>计时器与此无关。它正在跟踪一个picturebox:)是的,我看到我正在创建Form1的一个实例。。。但是我需要使用其中的项,我可以在不引起构造函数的情况下以某种方式进行吗?