Head First C# Lab1 A Day at the Races called method not executing

11,750

Solution 1

In the PlaceBet() method, you are overwriting MyLabel with a new Label() therefore the original context of the label on the form is lost.

Although you are actually updating a Label, it's not the Label on the form.

public bool PlaceBet(int Amount, int Dog)
        {
            this.MyBet = new Bet();

            if (Cash >= Amount)
            {
                Cash = Cash - Amount;
                MyLabel = new Label(); // remove this
                MyBet.Amount = Amount;
                MyBet.Dog = Dog;
                UpdateLabels();
                return true;
            }
            else
            {
                return false;
            }
        }

Solution 2

in PlaceBet method you have forgotten to set the Bettor property:

            if (Cash >= Amount)
            {
                Cash = Cash - Amount;
                MyLabel = new Label();
                MyBet.Amount = Amount; // HERE
                MyBet.Dog = Dog; // HERE
                UpdateLabels();
                return true;

just add there also a line:

                MyBet.Bettor = this;

Explanation/rationale: The point is that without it, when a "Guy" creates a "Bet", the Bet does not get to know who has created it. Nowhere in your code you set the Bettor field, so it never has a chance to be set to something meaningful. The bet will simply retain the default NULL value in this field. As I do not actually read/trace all the code, I think the simpliest way would be to make the Bet know his owner straight from the very beginning.

Solution 3

In Guy.cs when you call PlaceBet(...) and create instantiate the bet, you need to set:

this.MyBet.Bettor = this;

Within this function, this refers to the instance of Guy that is placing the bet.

The second problem you have is with the creation of a new instance of Label, without actually replacing the Label on your form with the new one. In summary fix the PlaceBet(...) method like so:

public bool PlaceBet(int Amount, int Dog)
{
    this.MyBet = new Bet();

    if (Cash >= Amount)
    {
        Cash = Cash - Amount;

        // remove the following line
        // MyLabel = new Label();

        MyBet.Amount = Amount;
        MyBet.Dog = Dog;

        // insert this line...
        MyBet.Bettor = this;

        UpdateLabels();
        return true;
    }
    else
    {
        return false;
    }
}

Solution 4

I just performed this exercise myself in the book... been running through it. I looked over your code to see how you took care of this problem and I found a pretty big bug in how you handled paying out the betters - In form1.cs when you allow your loop to capture multiple winners you are not continuing to distribute winnings with the Collect method to anyone who bet on anything besides the last winning dog

while (num_winners == 0)
        {
            for (int i = 0; i < Dogs.Length; i++)
            {
                if (Dogs[i].Run())
                {
                    num_winners++;
                    winner = i + 1;
                }
            }
            Application.DoEvents();
            System.Threading.Thread.Sleep(3);
        }

        if (num_winners > 1)
 // you say that you have multiple winners right here but you never eval on 
 //it - winner is still set to one value above
            MessageBox.Show("We have " + num_winners + " winners"); 
        else
            MessageBox.Show(" Dog #" + winner + "wins!");

        for (int i = 0; i < Dogs.Length; i++)
        {
            Dogs[i].TakeStartingPosition();
        }

        for (int i = 0; i < Bettors.Length; i ++)
        {
            Bettors[i].Collect(winner);
            Bettors[i].ClearBet();
            Bettors[i].UpdateLabels();
        }

What will need to be changed to correct this and disperse bets appropriately:

1) Make the betting scheme more realistic - when the bet is placed - subtract the money. You need to allow for a Re-Bet to take place just in case someone wants to redo one of the users on the front page

in guy.cs
    public bool PlaceBet(int amount, int dog)
    {
        // place a new bet and store it in the bet field, return true if there is enough money
        if (amount > Cash)
        {
            MessageBox.Show("I don't have enough money for that bet!", Name + " says...");
            return false;
        }
        else
        {
            if (this.MyBet == null)
            {
                this.MyBet = new Bet() { Amount = amount, Bettor = this, Dog = dog };
                this.Cash -= amount;
                this.UpdateLabels();
                return true;
            }
            else
            {
                this.Cash += this.MyBet.Amount;
                this.MyBet = null;
                this.MyBet = new Bet() { Amount = amount, Bettor = this, Dog = dog };
                this.Cash -= amount;
                this.UpdateLabels();
                return true;
            }
        }
    }

2) Now that the betters already lost/submitted their money and we don't have to worry about sending negative monies to them if their dog doesn't win, the Bet.cs Payout method can be updated to only provide a positive return if the winning dog matches their bet dog. if it doesn't, it returns nothing.

    public int PayOut(int Winner)
    {
        // the parameter is the winner of the race. If the dog won, return the amount bet.
        // otherwise return nothing

        if (Winner == Dog)
        {
            int payout = Amount*2;
            return payout;
        }
        else
        {
            int payout = 0;
            return payout;
        }        
    }

3) and now we can adjust our scheme in form1.cs to take care of paying multiples (even though this never really happens)

private void formButtonRace_Click(object sender, EventArgs e)
    {
        int winner = 0;
        int windog = 0;
        int count = 0;
        for (int i = 0; i < Bettors.Length; i++)
        {
            if (Bettors[1].MyBet != null)
            {
                count++;
            }
        }

        if (count == Bettors.Length)
        {
            while (winner == 0)
            {
                for (int i = 0; i < Dogs.Length; i++)
                {
                    if (Dogs[i].Run())
                    {
                        winner++;
                        windog = i + 1;
                        for (int i2 = 0; i2 < Bettors.Length; i2++)
                        {
                            Bettors[i2].Collect(i + 1);
                        }
                    }
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(3);
                }
            }
            if (winner > 1)
            {
                MessageBox.Show("Multiple winners!", "WOW");
            }
            else
            {
                MessageBox.Show("The winner was dog #" + windog);
            }
            for (int i = 0; i < Bettors.Length; i++)
            {
                Bettors[i].ClearBet(true);
            }
            for (int i = 0; i < Dogs.Length; i++)
            {
                Dogs[i].TakeStartingPosition();
            }
        }
        else
        {
            MessageBox.Show("Not all players have placed their bets!", "Wait wait!");
        }
    }

The reason why my ClearBet is passing in a bool is because I had to restore the money bet to each individual Guy if the reset button was pressed. However, if the race was completed I wanted to reset them without returning their bets.

This is that section for me in my code:

public void ClearBet(bool isRaceOver)
    {
        if (isRaceOver)
        // reset bet when race is over
        {
            MyBet = null;                
        }
        else
        {
            if (this.MyBet != null)
            {
                Cash += this.MyBet.Amount;
                this.MyBet = null;                 
            }
            else
            {
                this.MyBet = null;
            }                 
        }
        UpdateLabels();
    }
Share:
11,750

Related videos on Youtube

JsonStatham
Author by

JsonStatham

C#, Blazor,MVC, .NetCore 5/6 , AZURE, SQL Server Developer with 11 years experience

Updated on September 15, 2022

Comments

  • JsonStatham
    JsonStatham over 1 year

    I have a problem with the greyhound application that I have created. when I use the radio button to select who is placing a bet (Say Bob) and put his bet amount to 10 on dog number 4, (see image #1) when I click Bets, to update the 'Bob hasnt placed any bets' label with the description() method I get an error (see image #2)

    image #1

    image #2

    What should happen is where it says "bob hasnt placed any bets" it should now read "bob bets 10 bucks on dog # 4. I have established this is failing due to the bettor returning NULL, but I cannot work out why this is when Bettor is referencing the Guy class which contains the bettor's name.

    On a side notem when the race finishes and if Bob wins, he is note getting paid so either the PayOut() or Collect() methods are not working either.

    Below are my 3 classes and my Form1.cs

    Greyhound.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace A_Day_at_the_Races
    {
        public class Greyhound
        {
            public int StartingPosition; //Where my PictureBox starts
            public int RacetrackLength; // How long the racetrack is
            public PictureBox MyPictureBox = null; //My PictureBox object
            public int Location = 0; // My Location on the racetrack
            public Random Randomizer; // An instance of Random
    
            public bool Run()
            {
                //1. Move forward either 1,2,3 or 4 spaces at random
                int moveforward = Randomizer.Next(1, 4); // declare an int called 'moveforward' will move forward 1,2,3 or 4 spaces at random
    
                //2. Update the position of my PictureBox on the form
                Point p = MyPictureBox.Location; // current location of the picture of the greyhound
                p.X += moveforward;
                MyPictureBox.Location = p;
    
                //3. Return true if I won the race
                if (p.X >= RacetrackLength)
                    return true;
                else
                    return false;
            }
    
            public void TakeStartingPosition()
            {
                //Reset my location to the start line
                //MyPictureBox.Location.X = StartingPosition;
    
                StartingPosition = 0;
            }
        }
    }
    

    Guy.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace A_Day_at_the_Races
    {
        public class Guy
        {
            public string Name; // The guy's name
            public Bet MyBet = null; // An instance of bet() that has how much he's betting
            public int Cash; // How much cash he has
            // these last two fields are the guy's GUI controls on the form
            public RadioButton MyRadioButton; // My RadioButton
            public Label MyLabel; // My Label
    
            public void UpdateLabels()
            {
                //1.Set my label to my bet's description, 
                if (MyBet == null)
                    MyLabel.Text = Name + " hasnt placed any bets";
                else
                    MyLabel.Text = MyBet.GetDescription();
    
                //2.Set the label on my radio button to show my cash ("Joe has 43 dollars")
                MyRadioButton.Text = Name + " has " + Cash + " bucks";
            }
    
            public void ClearBet()
            {
                //1.Reset my bet so it's zero
                MyBet = null;
            }
    
            //1.Place a new bet and store it in my bet field
            //2.Return true if the guy had enough money to bet
            public bool PlaceBet(int Amount, int Dog)
            {
                this.MyBet = new Bet();
    
                if (Cash >= Amount)
                {
                    Cash = Cash - Amount;
                    MyLabel = new Label();
                    MyBet.Amount = Amount;
                    MyBet.Dog = Dog;
                    UpdateLabels();
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
            public void Collect(int Winner)
            {
                if (MyBet != null)
                    //1.Ask my bet to pay out (hint use the bet object to do the work)
                    Cash += MyBet.PayOut(Winner);
            }
        }
    }
    

    Bet.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace A_Day_at_the_Races
    {
        public class Bet
        {
             public int Amount; // The amount of cash that was bet
             public int Dog; // The number of the dog the bet is on
             public Guy Bettor; // The guy who placed the bet
    
             public string GetDescription()
             {
                 if (Amount > 0)
                     return Bettor.Name + " bets " + Amount + " bucks on dog #" + Dog;
                 else
                     return Bettor.Name + " hasnt placed a bet";
             }
    
             public int PayOut(int Winner)
             {
                 if (Winner == Dog)
                     return Amount;
                 else
                     return -1 * Amount;
             }
        }
    }
    

    Form1.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace A_Day_at_the_Races
    {
        public partial class Form1 : Form
        {
            Guy[] Bettors;
            Greyhound[] Dogs;
            Guy CurrentBettor;
    
            public Form1()
            {
                InitializeComponent();
                Random Randomizer = new Random();
    
                //initialise all my guys and dogs
                Bettors = new Guy[3];
                Dogs = new Greyhound[4];
    
                //guys
                Bettors[0] = new Guy();
                Bettors[0].Name = "Joe";
                Bettors[0].MyRadioButton = joeRadioButton;
                Bettors[0].MyLabel = joeBetLabel;
                Bettors[0].Cash = 50;
                Bettors[0].UpdateLabels();
    
                Bettors[1] = new Guy();
                Bettors[1].Name = "Bob";
                Bettors[1].MyRadioButton = bobRadioButton;
                Bettors[1].MyLabel = bobBetLabel;
                Bettors[1].Cash = 75;
                Bettors[1].UpdateLabels();
    
                Bettors[2] = new Guy();
                Bettors[2].Name = "Al";
                Bettors[2].MyRadioButton = alRadioButton;
                Bettors[2].MyLabel = alBetLabel;
                Bettors[2].Cash = 45;
                Bettors[2].UpdateLabels();
    
    
                int StartPosition = pictureBoxDog1.Location.X;
                int distance = pictureBox1.Width;
                for (int i = 0; i < 4; i++)
                {
                    Dogs[i] = new Greyhound();
                    Dogs[i].Randomizer = Randomizer;
                    Dogs[i].RacetrackLength = distance;
                    Dogs[i].Location = Dogs[i].StartingPosition = StartPosition;
                }
    
                Dogs[0].MyPictureBox = pictureBoxDog1;
                Dogs[1].MyPictureBox = pictureBoxDog2;
                Dogs[2].MyPictureBox = pictureBoxDog3;
                Dogs[3].MyPictureBox = pictureBoxDog4;
    
                CurrentBettor = Bettors[0];
            }
    
            private void RaceButton_Click(object sender, EventArgs e)
            {
                int winner = 0;
                int num_winners = 0;
    
                while (num_winners == 0)
                {
                    for (int i = 0; i < Dogs.Length; i++)
                    {
                        if (Dogs[i].Run())
                        {
                            num_winners++;
                            winner = i + 1;
                        }
                    }
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(3);
                }
    
                if (num_winners > 1)
                    MessageBox.Show("We have " + num_winners + " winners");
                else
                    MessageBox.Show(" Dog #" + winner + "wins!");
    
                for (int i = 0; i < Dogs.Length; i++)
                {
                    Dogs[i].TakeStartingPosition();
                }
    
                for (int i = 0; i < Bettors.Length; i ++)
                {
                    Bettors[i].Collect(winner);
                    Bettors[i].ClearBet();
                    Bettors[i].UpdateLabels();
                }
    
                numericUpDownBet.Value = numericUpDownBet.Minimum;
                numericUpDownDog.Value = numericUpDownDog.Minimum;
            }
    
            private void joeRadioButton_CheckedChanged(object sender, EventArgs e)
            {
                SetBettor(0);
            }
    
            private void bobRadioButton_CheckedChanged_1(object sender, EventArgs e)
            {
                SetBettor(1);
            }
    
            private void alRadioButton_CheckedChanged_1(object sender, EventArgs e)
            {
                SetBettor(2);
            }
    
            private void BetsButton_Click(object sender, EventArgs e)
            {
                CurrentBettor.PlaceBet((int)numericUpDownBet.Value, (int)numericUpDownDog.Value);
                CurrentBettor.UpdateLabels();
            }
            private void SetBettor(int index)
            {
                CurrentBettor = Bettors[index];
                NameLabel.Text = CurrentBettor.Name;
                if (CurrentBettor.MyBet != null)
                {
                    numericUpDownBet.Value = CurrentBettor.MyBet.Amount;
                    numericUpDownDog.Value = CurrentBettor.MyBet.Dog;
                }
                else
                {
                    numericUpDownBet.Value = numericUpDownBet.Minimum;
                    numericUpDownDog.Value = 1;
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                minimumBetLabel.Text = "Minimum Bet $5.00";
            }
    
            private void ResetButton_Click(object sender, EventArgs e)
            {
                pictureBoxDog1.Location = new Point(61,32);
                pictureBoxDog2.Location = new Point(61,84);
                pictureBoxDog3.Location = new Point(61,131);
                pictureBoxDog4.Location = new Point(61,181);
            }
        }
    }
    

    Form1.Designer.cs

    namespace A_Day_at_the_Races
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
                this.pictureBox1 = new System.Windows.Forms.PictureBox();
                this.pictureBoxDog1 = new System.Windows.Forms.PictureBox();
                this.pictureBoxDog2 = new System.Windows.Forms.PictureBox();
                this.pictureBoxDog3 = new System.Windows.Forms.PictureBox();
                this.pictureBoxDog4 = new System.Windows.Forms.PictureBox();
                this.RaceButton = new System.Windows.Forms.Button();
                this.minimumBetLabel = new System.Windows.Forms.Label();
                this.joeRadioButton = new System.Windows.Forms.RadioButton();
                this.bobRadioButton = new System.Windows.Forms.RadioButton();
                this.alRadioButton = new System.Windows.Forms.RadioButton();
                this.BetsLabel = new System.Windows.Forms.Label();
                this.joeBetLabel = new System.Windows.Forms.Label();
                this.bobBetLabel = new System.Windows.Forms.Label();
                this.alBetLabel = new System.Windows.Forms.Label();
                this.NameLabel = new System.Windows.Forms.Label();
                this.BetsButton = new System.Windows.Forms.Button();
                this.numericUpDownBet = new System.Windows.Forms.NumericUpDown();
                this.label1 = new System.Windows.Forms.Label();
                this.numericUpDownDog = new System.Windows.Forms.NumericUpDown();
                this.ResetButton = new System.Windows.Forms.Button();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog1)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog2)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog3)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog4)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.numericUpDownBet)).BeginInit();
                ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDog)).BeginInit();
                this.SuspendLayout();
                // 
                // pictureBox1
                // 
                this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
                this.pictureBox1.Location = new System.Drawing.Point(12, 12);
                this.pictureBox1.Name = "pictureBox1";
                this.pictureBox1.Size = new System.Drawing.Size(602, 201);
                this.pictureBox1.TabIndex = 0;
                this.pictureBox1.TabStop = false;
                // 
                // pictureBoxDog1
                // 
                this.pictureBoxDog1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxDog1.Image")));
                this.pictureBoxDog1.Location = new System.Drawing.Point(22, 21);
                this.pictureBoxDog1.Name = "pictureBoxDog1";
                this.pictureBoxDog1.Size = new System.Drawing.Size(75, 21);
                this.pictureBoxDog1.TabIndex = 1;
                this.pictureBoxDog1.TabStop = false;
                // 
                // pictureBoxDog2
                // 
                this.pictureBoxDog2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxDog2.Image")));
                this.pictureBoxDog2.Location = new System.Drawing.Point(22, 70);
                this.pictureBoxDog2.Name = "pictureBoxDog2";
                this.pictureBoxDog2.Size = new System.Drawing.Size(75, 22);
                this.pictureBoxDog2.TabIndex = 2;
                this.pictureBoxDog2.TabStop = false;
                // 
                // pictureBoxDog3
                // 
                this.pictureBoxDog3.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxDog3.Image")));
                this.pictureBoxDog3.Location = new System.Drawing.Point(22, 120);
                this.pictureBoxDog3.Name = "pictureBoxDog3";
                this.pictureBoxDog3.Size = new System.Drawing.Size(75, 24);
                this.pictureBoxDog3.TabIndex = 3;
                this.pictureBoxDog3.TabStop = false;
                // 
                // pictureBoxDog4
                // 
                this.pictureBoxDog4.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxDog4.Image")));
                this.pictureBoxDog4.Location = new System.Drawing.Point(22, 170);
                this.pictureBoxDog4.Name = "pictureBoxDog4";
                this.pictureBoxDog4.Size = new System.Drawing.Size(75, 24);
                this.pictureBoxDog4.TabIndex = 4;
                this.pictureBoxDog4.TabStop = false;
                // 
                // RaceButton
                // 
                this.RaceButton.Location = new System.Drawing.Point(468, 269);
                this.RaceButton.Name = "RaceButton";
                this.RaceButton.Size = new System.Drawing.Size(146, 73);
                this.RaceButton.TabIndex = 5;
                this.RaceButton.Text = "Race!";
                this.RaceButton.UseVisualStyleBackColor = true;
                this.RaceButton.Click += new System.EventHandler(this.RaceButton_Click);
                // 
                // minimumBetLabel
                // 
                this.minimumBetLabel.AutoSize = true;
                this.minimumBetLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                this.minimumBetLabel.Location = new System.Drawing.Point(9, 241);
                this.minimumBetLabel.Name = "minimumBetLabel";
                this.minimumBetLabel.Size = new System.Drawing.Size(0, 13);
                this.minimumBetLabel.TabIndex = 6;
                // 
                // joeRadioButton
                // 
                this.joeRadioButton.AutoSize = true;
                this.joeRadioButton.Location = new System.Drawing.Point(12, 269);
                this.joeRadioButton.Name = "joeRadioButton";
                this.joeRadioButton.Size = new System.Drawing.Size(85, 17);
                this.joeRadioButton.TabIndex = 7;
                this.joeRadioButton.TabStop = true;
                this.joeRadioButton.Text = "radioButton1";
                this.joeRadioButton.UseVisualStyleBackColor = true;
                this.joeRadioButton.CheckedChanged += new System.EventHandler(this.joeRadioButton_CheckedChanged);
                // 
                // bobRadioButton
                // 
                this.bobRadioButton.AutoSize = true;
                this.bobRadioButton.Location = new System.Drawing.Point(12, 293);
                this.bobRadioButton.Name = "bobRadioButton";
                this.bobRadioButton.Size = new System.Drawing.Size(85, 17);
                this.bobRadioButton.TabIndex = 8;
                this.bobRadioButton.TabStop = true;
                this.bobRadioButton.Text = "radioButton1";
                this.bobRadioButton.UseVisualStyleBackColor = true;
                this.bobRadioButton.CheckedChanged += new System.EventHandler(this.bobRadioButton_CheckedChanged_1);
                // 
                // alRadioButton
                // 
                this.alRadioButton.AutoSize = true;
                this.alRadioButton.Location = new System.Drawing.Point(12, 317);
                this.alRadioButton.Name = "alRadioButton";
                this.alRadioButton.Size = new System.Drawing.Size(85, 17);
                this.alRadioButton.TabIndex = 9;
                this.alRadioButton.TabStop = true;
                this.alRadioButton.Text = "radioButton2";
                this.alRadioButton.UseVisualStyleBackColor = true;
                this.alRadioButton.CheckedChanged += new System.EventHandler(this.alRadioButton_CheckedChanged_1);
                // 
                // BetsLabel
                // 
                this.BetsLabel.AutoSize = true;
                this.BetsLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                this.BetsLabel.Location = new System.Drawing.Point(164, 241);
                this.BetsLabel.Name = "BetsLabel";
                this.BetsLabel.Size = new System.Drawing.Size(32, 13);
                this.BetsLabel.TabIndex = 10;
                this.BetsLabel.Text = "Bets";
                // 
                // joeBetLabel
                // 
                this.joeBetLabel.AutoSize = true;
                this.joeBetLabel.Location = new System.Drawing.Point(164, 269);
                this.joeBetLabel.Name = "joeBetLabel";
                this.joeBetLabel.Size = new System.Drawing.Size(35, 13);
                this.joeBetLabel.TabIndex = 11;
                this.joeBetLabel.Text = "label1";
                // 
                // bobBetLabel
                // 
                this.bobBetLabel.AutoSize = true;
                this.bobBetLabel.Location = new System.Drawing.Point(164, 293);
                this.bobBetLabel.Name = "bobBetLabel";
                this.bobBetLabel.Size = new System.Drawing.Size(35, 13);
                this.bobBetLabel.TabIndex = 12;
                this.bobBetLabel.Text = "label1";
                // 
                // alBetLabel
                // 
                this.alBetLabel.AutoSize = true;
                this.alBetLabel.Location = new System.Drawing.Point(164, 317);
                this.alBetLabel.Name = "alBetLabel";
                this.alBetLabel.Size = new System.Drawing.Size(35, 13);
                this.alBetLabel.TabIndex = 13;
                this.alBetLabel.Text = "label1";
                // 
                // NameLabel
                // 
                this.NameLabel.AutoSize = true;
                this.NameLabel.Location = new System.Drawing.Point(9, 359);
                this.NameLabel.Name = "NameLabel";
                this.NameLabel.Size = new System.Drawing.Size(0, 13);
                this.NameLabel.TabIndex = 14;
                // 
                // BetsButton
                // 
                this.BetsButton.Location = new System.Drawing.Point(54, 354);
                this.BetsButton.Name = "BetsButton";
                this.BetsButton.Size = new System.Drawing.Size(75, 23);
                this.BetsButton.TabIndex = 15;
                this.BetsButton.Text = "Bets";
                this.BetsButton.UseVisualStyleBackColor = true;
                this.BetsButton.Click += new System.EventHandler(this.BetsButton_Click);
                // 
                // numericUpDownBet
                // 
                this.numericUpDownBet.Location = new System.Drawing.Point(135, 357);
                this.numericUpDownBet.Minimum = new decimal(new int[] {
                5,
                0,
                0,
                0});
                this.numericUpDownBet.Name = "numericUpDownBet";
                this.numericUpDownBet.Size = new System.Drawing.Size(72, 20);
                this.numericUpDownBet.TabIndex = 16;
                this.numericUpDownBet.Value = new decimal(new int[] {
                5,
                0,
                0,
                0});
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(214, 359);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(113, 13);
                this.label1.TabIndex = 17;
                this.label1.Text = "bucks on dog number ";
                // 
                // numericUpDownDog
                // 
                this.numericUpDownDog.Location = new System.Drawing.Point(334, 356);
                this.numericUpDownDog.Maximum = new decimal(new int[] {
                4,
                0,
                0,
                0});
                this.numericUpDownDog.Minimum = new decimal(new int[] {
                1,
                0,
                0,
                0});
                this.numericUpDownDog.Name = "numericUpDownDog";
                this.numericUpDownDog.Size = new System.Drawing.Size(79, 20);
                this.numericUpDownDog.TabIndex = 18;
                this.numericUpDownDog.Value = new decimal(new int[] {
                1,
                0,
                0,
                0});
                // 
                // ResetButton
                // 
                this.ResetButton.Location = new System.Drawing.Point(468, 349);
                this.ResetButton.Name = "ResetButton";
                this.ResetButton.Size = new System.Drawing.Size(146, 41);
                this.ResetButton.TabIndex = 19;
                this.ResetButton.Text = "Reset";
                this.ResetButton.UseVisualStyleBackColor = true;
                this.ResetButton.Click += new System.EventHandler(this.ResetButton_Click);
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(626, 410);
                this.Controls.Add(this.ResetButton);
                this.Controls.Add(this.numericUpDownDog);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.numericUpDownBet);
                this.Controls.Add(this.BetsButton);
                this.Controls.Add(this.NameLabel);
                this.Controls.Add(this.alBetLabel);
                this.Controls.Add(this.bobBetLabel);
                this.Controls.Add(this.joeBetLabel);
                this.Controls.Add(this.BetsLabel);
                this.Controls.Add(this.alRadioButton);
                this.Controls.Add(this.bobRadioButton);
                this.Controls.Add(this.joeRadioButton);
                this.Controls.Add(this.minimumBetLabel);
                this.Controls.Add(this.RaceButton);
                this.Controls.Add(this.pictureBoxDog4);
                this.Controls.Add(this.pictureBoxDog3);
                this.Controls.Add(this.pictureBoxDog2);
                this.Controls.Add(this.pictureBoxDog1);
                this.Controls.Add(this.pictureBox1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog1)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog2)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog3)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.pictureBoxDog4)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.numericUpDownBet)).EndInit();
                ((System.ComponentModel.ISupportInitialize)(this.numericUpDownDog)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.PictureBox pictureBox1;
            private System.Windows.Forms.PictureBox pictureBoxDog1;
            private System.Windows.Forms.PictureBox pictureBoxDog2;
            private System.Windows.Forms.PictureBox pictureBoxDog3;
            private System.Windows.Forms.PictureBox pictureBoxDog4;
            private System.Windows.Forms.Button RaceButton;
            private System.Windows.Forms.Label minimumBetLabel;
            private System.Windows.Forms.RadioButton joeRadioButton;
            private System.Windows.Forms.RadioButton bobRadioButton;
            private System.Windows.Forms.RadioButton alRadioButton;
            private System.Windows.Forms.Label BetsLabel;
            private System.Windows.Forms.Label joeBetLabel;
            private System.Windows.Forms.Label bobBetLabel;
            private System.Windows.Forms.Label alBetLabel;
            private System.Windows.Forms.Label NameLabel;
            private System.Windows.Forms.Button BetsButton;
            private System.Windows.Forms.NumericUpDown numericUpDownBet;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.NumericUpDown numericUpDownDog;
            private System.Windows.Forms.Button ResetButton;
        }
    }
    
    • Tim Schmelter
      Tim Schmelter over 11 years
      Too much code, reduce your question to it's core problem. This is neither Codereview nor WriteMyCode.
    • quetzalcoatl
      quetzalcoatl over 11 years
      I have reformatted and minimified your code a little. Please note that you've forgotten to add Form1.Designer.cs and as such we cannot RUN the code samples, only read and imagine :)
  • JsonStatham
    JsonStatham over 11 years
    Have added this however it is still not updating the label that is meant to be populated from the description() method, it remains as "bob hasnt placed any bets" although does not go into debug mode anymore?
  • quetzalcoatl
    quetzalcoatl over 11 years
    So, it's great. That one bug is solved. It seems that you have some other bug, too. Gimme a sec, I'll check.
  • JsonStatham
    JsonStatham over 11 years
    Have done this however when clicking the BetsButton_Click object it still does not update the bobBetLabel with the description() method
  • cspolton
    cspolton over 11 years
    Is the bet amount definitely greater than 0?
  • JsonStatham
    JsonStatham over 11 years
    Yes definitely, Ive set the minimum value of the numericUpDownBet object to 5 anyway so it will always be at least 5.
  • quetzalcoatl
    quetzalcoatl over 11 years
    Note that that text shows up both when no bet at all, and when Bet has Amount of zero. The bet is created always when you click, so MyBet is not null if you clicked at all. The only way possible woudl be that the MyBet.Amount is zero, as seen in GetDescription. This could happen in two situations. First, actually someone has placed zero-bet. Second - in PlaceBet, the Cash >= Amount has failed. In such case, the newly-created Bet has been NOT SET UP at all, and is all-empty with nulls and zeroes.
  • quetzalcoatl
    quetzalcoatl over 11 years
    Try moving this.MyBet = new Bet(); into that if(Cash >= Amount) so the bet is not replaced when condition fails, and ensure that the cash was higher than amount:)
  • quetzalcoatl
    quetzalcoatl over 11 years
    What do you do? What steps are you performing? What happens? What have you checked? What values are in the variables? Have you placed any breakpoints to see what was actually run? And to see what handlers fire when you click? Repating that "doesn't" work or that "is broken" does not help much..
  • quetzalcoatl
    quetzalcoatl over 11 years
    I've found it: you should NOT do MyLabel = new Label(); in the PlaceBet. This way, you are resetting all the "links" to labels that were done in the Form1's constructor. Just delete this line. You do not need to create any new labels. All were already created in the designer.
  • quetzalcoatl
    quetzalcoatl over 11 years
    With the odd line, you were creating a new Label every time a bet was done and you set the text to that new label. The label that was visible onscreen was thus never updated with new text..
  • cspolton
    cspolton over 11 years
    @quetzalcoat: Good persistence