如何在每次单击按钮事件时重新运行程序的特定部分

本文关键字:程序 重新运行 定部 事件 按钮 单击 | 更新日期: 2023-09-27 18:27:22

我正试图制造一台焦炭机,但这并非没有麻烦。

我希望每次按钮点击事件发生时都能重新运行一个特定的代码块。我该怎么做?

这是我的完整代码:

using System;
using System.Windows.Forms;
using System.Drawing;
namespace QuickSharp
{
public class CokeMachine
{

    public Button Coke = new Button();
    public Button Sprite = new Button();
    public Button Fanta = new Button();
    public Button RedBull = new Button();
    public Button Juice = new Button();
    public Button Water = new Button();
    double CokeCost = 1.00;
    double SpriteCost = 1.00;
    double FantaCost = 1.00;
    double RedBullCost = 2.50;
    double JuiceCost = 2.00;
    double WaterCost = 0.50;
    public Button Coin1 = new Button();
    public Button Coin2 = new Button();
    public Button Coin3 = new Button();
    public Button Coin4 = new Button();
    public Button Coin5 = new Button();
    public Button Coin6 = new Button();
    double CoinAmount1 = 0.05;
    double CoinAmount2 = 0.10;
    double CoinAmount3 = 0.20;
    double CoinAmount4 = 0.50;
    double CoinAmount5 = 1.00;
    double CoinAmount6 = 2.00;
    public double TotalInsertedCoins = 0;
    //EventHandlers for drink buttons
    public void DrinkButtonEvents()
    {
        Coke.Click += new EventHandler(Coke_ClickHandler);
        Sprite.Click += new EventHandler(Sprite_ClickHandler);
        Fanta.Click += new EventHandler(Fanta_ClickHandler);
        RedBull.Click += new EventHandler(RedBull_ClickHandler);
        Juice.Click += new EventHandler(Juice_ClickHandler);
        Water.Click += new EventHandler(Water_ClickHandler);
    }
    //Drink buttons - Click event handlers
    public void Coke_ClickHandler(object sender, EventArgs e)
    {
        if(TotalInsertedCoins >= CokeCost)
        {
            DispenseDrink("Coca-Cola" , CokeCost);
        }
        else
        {
            MessageBox.Show("You have not inserted enough money to buy this drink." , "Warning");
        }
    }
    public void Sprite_ClickHandler(object sender, EventArgs e)
    {
        if(TotalInsertedCoins >= SpriteCost)
        {
            DispenseDrink("Sprite" , SpriteCost);
        }
        else
        {
            MessageBox.Show("You have not inserted enough money to buy this drink." , "Warning");
        }
    }
    public void Fanta_ClickHandler(object sender, EventArgs e)
    {
        if(TotalInsertedCoins >= FantaCost)
        {
            DispenseDrink("Fanta" , FantaCost);
        }
        else
        {
            MessageBox.Show("You have not inserted enough money to buy this drink." , "Warning");
        }
    }
    public void RedBull_ClickHandler(object sender, EventArgs e)
    {
        if(TotalInsertedCoins >= RedBullCost)
        {
            DispenseDrink("Red Bull" , RedBullCost);
        }
        else
        {
            MessageBox.Show("You have not inserted enough money to buy this drink." , "Warning");
        }
    }
    public void Juice_ClickHandler(object sender, EventArgs e)
    {
        if(TotalInsertedCoins >= JuiceCost)
        {
            DispenseDrink("Orange Juice" , JuiceCost);
        }
        else
        {
            MessageBox.Show("You have not inserted enough money to buy this drink." , "Warning");
        }
    }
    public void Water_ClickHandler(object sender, EventArgs e)
    {
        if(TotalInsertedCoins >= WaterCost)
        {
            DispenseDrink("Water" , WaterCost);
        }
        else
        {
            MessageBox.Show("You have not inserted enough money to buy this drink." , "Warning");
        }
    }
    //EventHandlers for money buttons
    public void MoneyButtonEvents()
    {
        Coin1.Click += new EventHandler(Coin1_ClickHandler);
        Coin2.Click += new EventHandler(Coin2_ClickHandler);
        Coin3.Click += new EventHandler(Coin3_ClickHandler);
        Coin4.Click += new EventHandler(Coin4_ClickHandler);
        Coin5.Click += new EventHandler(Coin5_ClickHandler);
        Coin6.Click += new EventHandler(Coin6_ClickHandler);
    }
    //Money buttons - Click event handlers
    public void Coin1_ClickHandler(object sender, EventArgs e)
    {
        TotalInsertedCoins += CoinAmount1;
    }
    public void Coin2_ClickHandler(object sender, EventArgs e)
    {
        TotalInsertedCoins += CoinAmount2;
    }
    public void Coin3_ClickHandler(object sender, EventArgs e)
    {
        TotalInsertedCoins += CoinAmount3;
    }
    public void Coin4_ClickHandler(object sender, EventArgs e)
    {
        TotalInsertedCoins += CoinAmount4;
    }
    public void Coin5_ClickHandler(object sender, EventArgs e)
    {
        TotalInsertedCoins += CoinAmount5;
    }
    public void Coin6_ClickHandler(object sender, EventArgs e)
    {
        TotalInsertedCoins += CoinAmount6;
    }
    private void DispenseDrink(string drink , double cost)
    {
        if(TotalInsertedCoins - cost == 0.0)
        {
            MessageBox.Show("Enjoy your " + drink + "!");
            TotalInsertedCoins = 0.0;
        }
        else
        {
            MessageBox.Show("Enjoy your " + drink + "! Here is your change: €" + (TotalInsertedCoins - cost));
            TotalInsertedCoins = 0.0;
        }

    }
    public CokeMachine()
    {
    MoneyButtonEvents();
    DrinkButtonEvents();
    }
}
public class CokeForm : Form
{
   public CokeForm()
   {
       CokeMachine Machine = new CokeMachine();

        // General aspect of machine
        this.Text = "Cola Machine";
        this.Size = new Size(450 , 500);
        Label Header;
        Header = new Label();
        Header.Text = "Coca-Cola Machine";
        Header.Font = new Font("Arial" , Header.Font.Size +5);
        Header.ForeColor = Color.DarkRed;
        Header.Location = new Point(132, 20);
        Header.AutoSize = true;
        this.Controls.Add(Header);
        TextBox TextBox1 ;
        TextBox1 = new TextBox();
        TextBox1.BackColor = Color.Black;
        TextBox1.ForeColor = Color.Red;
        TextBox1.Font = new Font("Arial" , TextBox1.Font.Size +3);
        TextBox1.ReadOnly = true;
        TextBox1.Size = new Size(210,300);
        TextBox1.Location = new Point(112,50);
        int tester = 0;
        if(Machine.TotalInsertedCoins == 0.05){tester = 1;}
        if(Machine.TotalInsertedCoins > 0.05){tester = 2;}
        else{tester = 0;}

        switch(tester)
        {
            case 1:
                TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins;
                break;
            case 2:
                TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins + "0";
                break;
            default:
                TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
                break;
        }
        /*
        Previous Attempt:
        if(Machine.TotalInsertedCoins == 0.00)
        {
            TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
        }
        else
        {
            TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins;
        }
        */
        this.Controls.Add(TextBox1);
        // Money aspect of machine
        Label Money;
        Money = new Label();
        Money.Text = "Insert Coins Here:";
        Money.Location = new Point(20, 100);
        this.Controls.Add(Money);
        //Money buttons
        Machine.Coin1.Text = "Insert €0.05";
        Machine.Coin1.Location = new Point(28, 125);
        this.Controls.Add(Machine.Coin1);
        Machine.Coin2.Text = "Insert €0.10";
        Machine.Coin2.Location = new Point(28, 165);
        this.Controls.Add(Machine.Coin2);
        Machine.Coin3.Text = "Insert €0.20";
        Machine.Coin3.Location = new Point(28, 205);
        this.Controls.Add(Machine.Coin3);
        Machine.Coin4.Text = "Insert €0.50";
        Machine.Coin4.Location = new Point(28, 245);
        this.Controls.Add(Machine.Coin4);
        Machine.Coin5.Text = "Insert €1.00";
        Machine.Coin5.Location = new Point(28, 285);
        this.Controls.Add(Machine.Coin5);
        Machine.Coin6.Text = "Insert €2.00";
        Machine.Coin6.Location = new Point(28, 325);
        this.Controls.Add(Machine.Coin6);

        // Drink aspect of machine
        Label Drinks;
        Drinks = new Label();
        Drinks.Text = "Choose Your Drink:";
        Drinks.Location = new Point(315 , 100);
        Drinks.AutoSize = true;
        this.Controls.Add(Drinks);
        //Drink buttons
        Machine.Coke.Text = "Coca-Cola (€1.00)";
        Machine.Coke.Location = new Point(315, 125);
        Machine.Coke.AutoSize = true;
        this.Controls.Add(Machine.Coke);
        Machine.Sprite.Text = "Sprite (€1.00)";
        Machine.Sprite.Location = new Point(315, 165);
        Machine.Sprite.AutoSize = true;
        this.Controls.Add(Machine.Sprite);
        Machine.Fanta.Text = "Fanta (€1.00)";
        Machine.Fanta.Location = new Point(315, 205);
        Machine.Fanta.AutoSize = true;
        this.Controls.Add(Machine.Fanta);
        Machine.RedBull.Text = "Red Bull (€2.50)";
        Machine.RedBull.Location = new Point(315, 245);
        Machine.RedBull.AutoSize = true;
        this.Controls.Add(Machine.RedBull);
        Machine.Juice.Text = "Fruit Juice (€2.00)";
        Machine.Juice.Location = new Point(315, 285);
        Machine.Juice.AutoSize = true;
        this.Controls.Add(Machine.Juice);
        Machine.Water.Text = "Water (€0.50)";
        Machine.Water.Location = new Point(315, 325);
        Machine.Water.AutoSize = true;
        this.Controls.Add(Machine.Water);
   }
}
public class Test
{
    public static void Main()
    {                  
        CokeForm ColaForm;
        ColaForm = new CokeForm();
        Application.Run(ColaForm);
    }
}
}

现在,每次按下硬币按钮,我都希望这个部分重新运行:

int tester = 0;
        if(Machine.TotalInsertedCoins == 0.05){tester = 1;}
        if(Machine.TotalInsertedCoins > 0.05){tester = 2;}
        else{tester = 0;}

        switch(tester)
        {
            case 1:
                TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins;
                break;
            case 2:
                TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins + "0";
                break;
            default:
                TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
                break;
        }

这样,可乐机的显示屏就会显示你插入了多少钱。

提前感谢!

如何在每次单击按钮事件时重新运行程序的特定部分

然后您应该将这段代码放入一个单独的方法中,并在需要的地方调用它。

将需要重新运行的部分重构为公共方法

public void CoinInserted(object sender, EventArgs e)
{
    int tester = 0;
    if (Machine.TotalInsertedCoins == 0.05) { tester = 1; }
    if (Machine.TotalInsertedCoins > 0.05) { tester = 2; }
    switch (tester)
    {
        case 1:
            TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins;
            break;
        case 2:
            TextBox1.Text = "Inserted Coins: €" + Machine.TotalInsertedCoins + "0";
            break;
        default:
            TextBox1.Text = "Buy Your Ice Cold Drinks Here!";
            break;
    }
}

将焦化设备和文本框1移出焦化成型构造函数

public partial class CokeForm : Form
{
    CokeMachine Machine = new CokeMachine();
    TextBox TextBox1;
    public CokeForm()
    {
        ...
    }

在cokeform构造函数中,添加以下代码

Machine.Coin1.Click += new EventHandler(CoinInserted);
Machine.Coin2.Click += new EventHandler(CoinInserted);
Machine.Coin3.Click += new EventHandler(CoinInserted);
Machine.Coin4.Click += new EventHandler(CoinInserted);
Machine.Coin5.Click += new EventHandler(CoinInserted);
Machine.Coin6.Click += new EventHandler(CoinInserted);
CoinInserted(this, null);