Head First C# Lab1 A Day at the Races called method not executing
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();
}
Related videos on Youtube
JsonStatham
C#, Blazor,MVC, .NetCore 5/6 , AZURE, SQL Server Developer with 11 years experience
Updated on September 15, 2022Comments
-
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)
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 over 11 yearsToo much code, reduce your question to it's core problem. This is neither
Codereview
norWriteMyCode
. -
quetzalcoatl over 11 yearsI 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 over 11 yearsHave 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 over 11 yearsSo, it's great. That one bug is solved. It seems that you have some other bug, too. Gimme a sec, I'll check.
-
JsonStatham over 11 yearsHave done this however when clicking the BetsButton_Click object it still does not update the bobBetLabel with the description() method
-
cspolton over 11 yearsIs the bet amount definitely greater than 0?
-
JsonStatham over 11 yearsYes definitely, Ive set the minimum value of the numericUpDownBet object to 5 anyway so it will always be at least 5.
-
quetzalcoatl over 11 yearsNote 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 inGetDescription
. This could happen in two situations. First, actually someone has placed zero-bet. Second - in PlaceBet, theCash >= 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 over 11 yearsTry moving
this.MyBet = new Bet();
into thatif(Cash >= Amount)
so the bet is not replaced when condition fails, and ensure that the cash was higher than amount:) -
quetzalcoatl over 11 yearsWhat 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 over 11 yearsI'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 over 11 yearsWith 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 over 11 years@quetzalcoat: Good persistence