2012-03-12 4 views
1

У меня есть эти два метода в 1 классе (класс CokeMachine):Как я могу вызвать событие click из другого класса?

public void MoneyButtonEvents() 
    { 
     Coin1.Click += new EventHandler(Coin1_ClickHandler); 
    } 

&

public void Coin1_ClickHandler(object sender, EventArgs e) 
    { 
     TotalInsertedCoins += CoinAmount1; 
     MessageBox.Show("Does this click work?"); 
    } 

А в другой класс (класс CokeForm: Form), я в здании форму для приложение. Одна часть его:

CokeMachine Machine = new CokeMachine(); 

Machine.Coin1.Text = "Test"; 
this.Controls.Add(Machine.Coin1); 

Но кнопка не показывает ничего, когда я нажимаю на него. Может ли кто-нибудь помочь мне с этим? Спасибо заранее!

PS: Полный код:

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 DrinkButtonsEvents() 
    { 
     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; 
     MessageBox.Show("Does this click work?"); 
    } 

    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 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); 

     //TextBox1.SelectionStart = TextBox1.Text.Length; 
     //TextBox1.ScrollToCaret(); 
     //TextBox1.Refresh(); 


     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 will be here 

     Machine.Coin1.Text = "Test"; 
     this.Controls.Add(Machine.Coin1); 


     // 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 will be here 
    } 
} 

public class Test 
{ 

    public static void Main() 
    {     

     CokeForm ColaForm; 
     ColaForm = new CokeForm(); 
     Application.Run(ColaForm); 
    } 
    } 
} 

ответ

1

Я не вижу ваш инициализатор для вашего CokeMachine Класс.

Попробуйте добавить это к вашему CokeMachine Класс:

public CokeMachine() 
{ 
    MoneyButtonEvents(); 
    DrinkButtonsEvents(); 
} 

Это заставит ваши обработчики, которые будут добавлены при создании класса.

+0

Спасибо! Мне еще многое предстоит узнать. –

2

MoneyButtonEvents никогда не вызывается.

Смежные вопросы