有人可以帮忙吗?我无法理解为什么当我按下按钮7时bool floorOne总是设置为false,即使我先按下button3或button1。这应该是一个相当简单的问题,只有在初始化时,按下button2或按下button4时才会出错。我不知道它是如何回归假的。
它可能有一个相对简单的解决方案,但我找不到它,谢谢你的时间。
编辑:当我调试时,它显示为false,我不知道这些信息是否会有所帮助。我知道很多代码可能不需要包含在这里,但是为了防止出现问题,我想我应该把它添加进来。
Edit2:太棒了,非常感谢大家!
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Elevator
{
public partial class Form1 : Form
{
public bool doorsOpen;
public bool floorOne;
public bool groundFloor;
public Form1()
{
InitializeComponent();
pictureBox1.Visible = false; // This is the bottom floor doors closed picture
pictureBox2.Visible = true; // This is the bottom floor doors open picture
pictureBox3.Visible = false; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
floorOne = false;
richTextBox1.Text = "Ground floor";
button1.BackColor = Color.Gray;
button2.BackColor = Color.Gray;
button3.Enabled = true;
button4.Enabled = false; // This makes it impossible to click the buttons if
button5.Enabled = false; // the lift is already on that floor, to start with this is the
button6.Enabled = true; // ground floor.
button5.BackColor = Color.Black;
button6.BackColor = Color.Red;
doorsOpen = true;
richTextBox2.Text = "Doors open";
}
public void Form1_Load(object sender, EventArgs e)
{
}
public void button3_Click(object sender, EventArgs e)
{
if (doorsOpen == true)
{
doorsOpen = false;
richTextBox2.Text = "Doors closed";
}
pictureBox1.Visible = false; // This is the bottom floor doors closed picture
pictureBox2.Visible = false; // This is the bottom floor doors open picture
pictureBox3.Visible = true; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
bool floorOne = true;
button1.BackColor = Color.Gray;
button2.BackColor = Color.Gray;
richTextBox1.Text = "First floor";
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = false;
button5.BackColor = Color.Red;
button6.BackColor = Color.Black;
}
public void button4_Click(object sender, EventArgs e)
{
if (doorsOpen == true)
{
doorsOpen = false;
richTextBox2.Text = "Doors closed";
}
pictureBox1.Visible = true; // This is the bottom floor doors closed picture
pictureBox2.Visible = false; // This is the bottom floor doors open picture
pictureBox3.Visible = false; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
bool floorOne = false;
button1.BackColor = Color.Gray;
button2.BackColor = Color.Gray;
richTextBox1.Text = "Ground floor";
button3.Enabled = true;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = true;
button5.BackColor = Color.Black;
button6.BackColor = Color.Red;
}
public void button7_Click(object sender, EventArgs e)
{
doorsOpen = true;
richTextBox2.Text = "Doors open";
if (floorOne == true)
{
pictureBox1.Visible = false; // This is the bottom floor doors closed picture
pictureBox2.Visible = false; // This is the bottom floor doors open picture
pictureBox3.Visible = false; // This is the top floor doors closed picture
pictureBox4.Visible = true; // This is the top floor doors open picture
}
else if (floorOne != true)
{
pictureBox1.Visible = false; // This is the bottom floor doors closed picture
pictureBox2.Visible = true; // This is the bottom floor doors open picture
pictureBox3.Visible = false; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
}
}
public void button1_Click(object sender, EventArgs e)
{
if (doorsOpen == true)
{
doorsOpen = false;
richTextBox2.Text = "Doors closed";
}
pictureBox1.Visible = false; // This is the bottom floor doors closed picture
pictureBox2.Visible = false; // This is the bottom floor doors open picture
pictureBox3.Visible = true; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
bool floorOne = true;
button1.BackColor = Color.Yellow;
button2.BackColor = Color.Gray;
richTextBox1.Text = "First floor";
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = false;
button5.BackColor = Color.Red;
button6.BackColor = Color.Black;
}
public void button2_Click(object sender, EventArgs e)
{
if (doorsOpen == true)
{
doorsOpen = false;
richTextBox2.Text = "Doors closed";
}
pictureBox1.Visible = true; // This is the bottom floor doors closed picture
pictureBox2.Visible = false; // This is the bottom floor doors open picture
pictureBox3.Visible = false; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
bool floorOne = false;
button1.BackColor = Color.Gray;
button2.BackColor = Color.Yellow;
richTextBox1.Text = "Ground floor";
button3.Enabled = true;
button4.Enabled = false;
button5.Enabled = false;
button6.Enabled = true;
button5.BackColor = Color.Black;
button6.BackColor = Color.Red;
}
}
}
答案 0 :(得分:6)
因为在某些方法中,您声明了一个 new floorOne
变量,而不是修改现有的Form1字段。
替换
bool floorOne = true;
与
floorOne = true;
答案 1 :(得分:1)
在Button3和button4单击事件中删除bool变量的声明,只需更新它的值。因为您已经定义了 bool floorOne 所以您不需要再次声明它。
<强>更新强>
bool floorOne = true;
要强>
floorOne = true;
答案 2 :(得分:0)
这真的有一个简单的解决方案。 让我们说,你点击button1然后你想将floorOne设置为true,但你真正做的是: 创建新的LOCAL布尔值floorOne并将其设置为true(bool floorOne = true;)。但这并没有改变你的GLOBAL值floorOne。它具有相同的名称,但在这种情况下无关紧要。 删除代码中button1中的“bool”文本,然后“floorOne”将成为您的全局值。
button1的新代码(所有其他按钮的更改相同):
public void button1_Click(object sender, EventArgs e)
{
if (doorsOpen == true)
{
doorsOpen = false;
richTextBox2.Text = "Doors closed";
}
pictureBox1.Visible = false; // This is the bottom floor doors closed picture
pictureBox2.Visible = false; // This is the bottom floor doors open picture
pictureBox3.Visible = true; // This is the top floor doors closed picture
pictureBox4.Visible = false; // This is the top floor doors open picture
floorOne = true; // HERE IS THE CHANGE
button1.BackColor = Color.Yellow;
button2.BackColor = Color.Gray;
richTextBox1.Text = "First floor";
button3.Enabled = false;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = false;
button5.BackColor = Color.Red;
button6.BackColor = Color.Black;
}
试试这个:
public partial class Form1 : Form
{
public bool floorOne; // global value (automatically set to false (default value of false)
public Form1()
{
InitializeComponent();
}
public void button3_Click(object sender, EventArgs e)
{
bool floorOne = true; // new local value named floorOne (doesn change your global value)
MessageBox.Show("value of global floorOne is: " + this.floorOne.ToString());
// this.floorOne is your global value (try to find something about "this.")
this.floorOne = true;
MessageBox.Show("value of global floorOne is: " + this.floorOne.ToString());
}
}