如何强制编译器不考虑任何代码块,如果它来自不同的按钮事件



就我而言,我不希望这个块:如果编译器进入不同的特定按钮,if (Clicked == true){i = i+2;}if (Clicked == false){i = i-2;}工作;

这是 Button2,它返回品牌名称序列的元素,给定为 文本框4.

bool Clicked = false;
private void button2_Click(object sender, EventArgs e)
{
var car = cars.FirstOrDefault(c => c.Brand == textBox4.Text);
i = cars.FindIndex(c => c.Brand == textBox4.Text);
if (car != null)
{       
label1.Text = car.Brand;
label2.Text = car.Model;
label3.Text = car.Color;
i++;
}
else
{
MessageBox.Show("This car is not in the list");
}
}

button3_click事件应显示序列的下一个元素。

private void button3_Click(object sender, EventArgs e)
{
var car = cars.Select(a => a);
if (Clicked == true)
{
i=i+2;
}
if (i >= 0&&i < cars.Count)
{
label1.Text = car.ToArray()[i].Brand;
label2.Text = car.ToArray()[i].Model;
label3.Text = car.ToArray()[i].Color;
i++;   //abc; i = 1;            
Clicked = false;
}
} 

Button4 显示序列的先前元素

private void button4_Click(object sender, EventArgs e)
{
if (Clicked == false)
{
i=i-2;
Clicked = true;
}
var car = cars.Select(a => a);
if (i >= 0&&i<=cars.Count)
{
label1.Text = car.ToArray()[i].Brand;
label2.Text = car.ToArray()[i].Model;
label3.Text = car.ToArray()[i].Color;
i--;               
}
}

我不希望这个:if (Clicked == true){i = i+2;}和这个:if (Clicked == false) {i=i-2;}按钮3和按钮4(下一个和上一个按钮(中的代码块在按钮2内部的代码工作后立即点击任何一个时运行。我无法使用布尔标志来解决它,因为需要考虑三种情况。如何处理?

我将尝试回答这个问题,而不是 100% 确定你在问什么......

我的假设是你不想要"如果(点击..."部分运行 如果您之前刚刚单击了 Button2,但在单击 Button3 或 Button4 之后,可以运行 if 语句。

试图弄清楚你的代码,我认为你可以缩小它以删除它们。 首先,应从button2_Click中删除 i++

private void button2_Click(object sender, EventArgs e)
{
i = cars.FindIndex(c => c.Brand == textBox4.Text);
if(i >= 0)
{
var car = cars.ToArray()[i]; // no reason to search twice
label1.Text = car.Brand;
label2.Text = car.Model;
label3.Text = car.Color;
}
else
{
MessageBox.Show("This car is not in the list");
}
}

由于索引"i"在button2_Click中不会更改,因此可以在索引之前在"下一个"和"上一个"按钮中更改它。

private void button3_Click(object sender, EventArgs e)
{
// I don't think you need this
// var car = cars.Select(a => a);
if (i + 1 >= 0 && i + 1 < cars.Count)
{
i++;
var car = cars.ToArray()[i];
label1.Text = car.Brand;
label2.Text = car.Model;
label3.Text = car.Color;
}
}
private void button4_Click(object sender, EventArgs e)
{
if (i - 1 >= 0 && i - 1 <= cars.Count)
{
i--;
var car = cars.ToArray()[i];
label1.Text = car.Brand;
label2.Text = car.Model;
label3.Text = car.Color;
}
}

由于button3_Click和button4_Click几乎相同,因此您可以将它们放在一个事件中,并检查按下了哪个按钮并根据需要增加/减少,但这是一个意见呼吁,有理由不这样做。

我不知道"汽车"是什么类型,但做一个成员变量来容纳汽车甚至可能更好。ToArray(( 所以 ToArray 不必被调用那么多次。

最新更新