c# how does timeSpan work? - c#

I have a timer, how starts, when the text in a label appears and stop when you click on a button. Now i want to stop the reaktiontime and save it in a list, which i want to sort, so i can give out the fastest and lowest reaktiontime in a label. but in my code every time it shows 00:00:00 in the messagebox :(
public partial class Form1 : Form
{
Random r = new Random();
Random Farbe = new Random();
bool Start_MouseClick;
IList<string> Reaktionszeitliste = new List<string>() {};
IList<Color> myColors = new[] { Color.Red, Color.Blue, Color.Green, Color.White, Color.Yellow };
string[] colors = { "Rot", "Blau", "Grün", "Gelb", "Weiß" };
int Timeleft = 5;
int summe = 0, z;
string Reaktionszeit;
int Zeit;
int Spielzuege = 0;
DateTime Time1;
DateTime Time2;
TimeSpan ts;
private void btnRot_Click(object sender, EventArgs e)
{
Spielzuege = Spielzuege + 1;
timMessung.Stop();
if (Start_MouseClick == true)
{
int summe = 0, z;
lblAnzeige.Text = " ";
while (summe <= 0)
{
z = r.Next(1, 6);
summe = summe + z;
}
lblAnzeige.Text += colors[summe - 1] + "\n";
Zeit = 0;
timMessung.Enabled = true;
if (ckbExtrem.Checked == false)
{
lblAnzeige.ForeColor = myColors[Farbe.Next(myColors.Count)];
}
else
{
lblAnzeige.ForeColor = Color.FromArgb(Farbe.Next(256), Farbe.Next(256), Farbe.Next(256));
}
if (Spielzuege == 15)
{
if (txbPlayer2.Text != "")
{
MessageBox.Show("Spieler 2: Machen Sie sich bereit!");
}
else
{
MessageBox.Show(Convert.ToString(ts));
}
}
}
}
private void txbStart_MouseClick(object sender, MouseEventArgs e)
{
if (txbPlayer1.Text == "" && txbPlayer2.Text == "")
{
MessageBox.Show("Bitte geben Sie Spielername(n) ein!");
}
else
{
timVerzögerung.Enabled = true;
panel1.Visible = false;
lblAnzeige.Text = " ";
txbStart.Visible = false;
textBox1.Visible = false;
Start_MouseClick = true;
while (summe <= 0)
{
z = r.Next(1, 6);
summe = summe + z;
}
}
}
private void timMessung_Tick(object sender, EventArgs e)
{
if (timMessung.Enabled == true)
{
Time1 = DateTime.Now;
}
else
{
Time2 = DateTime.Now;
ts = Time1 - Time2;
int differenceInMilli = ts.Milliseconds;
}
}

In a first run i tried to alter your code so that it should run. But i found so many (coding style) issues within there that i simply wrote a completely new example. It also has some minor issues (e.g. size of buttons; it is possible that a color button occurs twice). But it hopefully shows you how TimeSpan and all the other parts can work together.
The Form1.cs file:
public partial class Form1 : Form
{
private Random _Random;
private List<TimeSpan> _ReactionTimes;
private Stopwatch _Stopwatch;
public Form1()
{
InitializeComponent();
_Stopwatch = new Stopwatch();
_Random = new Random(42);
_ReactionTimes = new List<TimeSpan>();
}
private Button CreateButton(Color color)
{
var button = new Button();
button.Click += OnColorButtonClick;
button.BackColor = color;
button.Text = color.Name;
return button;
}
private Button GetRandomButton()
{
var randomIndex = _Random.Next(0, flowLayoutPanel.Controls.Count);
return (Button)flowLayoutPanel.Controls[randomIndex];
}
private Color GetRandomColor()
{
var randomKnownColor = (KnownColor)_Random.Next((int)KnownColor.AliceBlue, (int)KnownColor.ButtonFace);
return Color.FromKnownColor(randomKnownColor);
}
private void InitializeColorButtons(int numberOfColors)
{
var buttons = Enumerable.Range(1, numberOfColors)
.Select(index => GetRandomColor())
.Select(color => CreateButton(color));
foreach (var button in buttons)
{
flowLayoutPanel.Controls.Add(button);
}
}
private void OnButtonStartClick(object sender, EventArgs e)
{
InitializeColorButtons((int)numericUpDownColors.Value);
StartMeasurement();
}
private void OnColorButtonClick(object sender, EventArgs e)
{
var button = (Button)sender;
if (button.Text != labelColorToClick.Text)
{
errorProviderWrongButton.SetIconPadding(button, -20);
errorProviderWrongButton.SetError(button, "Sorry, wrong button.");
return;
}
StopMeasurement();
_ReactionTimes.Add(_Stopwatch.Elapsed);
UpdateSummary();
}
private void StartMeasurement()
{
buttonStart.Enabled = false;
numericUpDownColors.Enabled = false;
labelColorToClick.Text = GetRandomButton().Text;
_Stopwatch.Reset();
_Stopwatch.Start();
}
private void StopMeasurement()
{
_Stopwatch.Stop();
errorProviderWrongButton.Clear();
flowLayoutPanel.Controls.Clear();
numericUpDownColors.Enabled = true;
buttonStart.Enabled = true;
labelColorToClick.Text = String.Empty;
}
private void UpdateSummary()
{
labelSummary.Text = String.Format("Current: {0:0.000} Minimum: {1:0.000} Maximum: {2:0.000}", _ReactionTimes.Last().TotalSeconds, _ReactionTimes.Min().TotalSeconds, _ReactionTimes.Max().TotalSeconds);
}
}
The Form1.Designer.cs file:
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()
{
this.components = new System.ComponentModel.Container();
this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
this.labelColorToClick = new System.Windows.Forms.Label();
this.buttonStart = new System.Windows.Forms.Button();
this.labelSummaryHeader = new System.Windows.Forms.Label();
this.labelSummary = new System.Windows.Forms.Label();
this.errorProviderWrongButton = new System.Windows.Forms.ErrorProvider(this.components);
this.numericUpDownColors = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.errorProviderWrongButton)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownColors)).BeginInit();
this.SuspendLayout();
//
// flowLayoutPanel
//
this.flowLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.flowLayoutPanel.Location = new System.Drawing.Point(12, 41);
this.flowLayoutPanel.Name = "flowLayoutPanel";
this.flowLayoutPanel.Size = new System.Drawing.Size(560, 386);
this.flowLayoutPanel.TabIndex = 0;
//
// labelColorToClick
//
this.labelColorToClick.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelColorToClick.Location = new System.Drawing.Point(174, 12);
this.labelColorToClick.Name = "labelColorToClick";
this.labelColorToClick.Size = new System.Drawing.Size(398, 23);
this.labelColorToClick.TabIndex = 1;
this.labelColorToClick.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// buttonStart
//
this.buttonStart.Location = new System.Drawing.Point(93, 12);
this.buttonStart.Name = "buttonStart";
this.buttonStart.Size = new System.Drawing.Size(75, 23);
this.buttonStart.TabIndex = 2;
this.buttonStart.Text = "Start";
this.buttonStart.UseVisualStyleBackColor = true;
this.buttonStart.Click += new System.EventHandler(this.OnButtonStartClick);
//
// labelSummaryHeader
//
this.labelSummaryHeader.Location = new System.Drawing.Point(12, 430);
this.labelSummaryHeader.Name = "labelSummaryHeader";
this.labelSummaryHeader.Size = new System.Drawing.Size(75, 23);
this.labelSummaryHeader.TabIndex = 3;
this.labelSummaryHeader.Text = "Summary:";
this.labelSummaryHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// labelSummary
//
this.labelSummary.Location = new System.Drawing.Point(93, 430);
this.labelSummary.Name = "labelSummary";
this.labelSummary.Size = new System.Drawing.Size(479, 23);
this.labelSummary.TabIndex = 4;
this.labelSummary.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// errorProviderWrongButton
//
this.errorProviderWrongButton.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
this.errorProviderWrongButton.ContainerControl = this;
//
// numericUpDownColors
//
this.numericUpDownColors.Location = new System.Drawing.Point(12, 14);
this.numericUpDownColors.Minimum = new decimal(new int[] {
2,
0,
0,
0});
this.numericUpDownColors.Name = "numericUpDownColors";
this.numericUpDownColors.Size = new System.Drawing.Size(75, 20);
this.numericUpDownColors.TabIndex = 5;
this.numericUpDownColors.Value = new decimal(new int[] {
10,
0,
0,
0});
//
// Form1
//
this.ClientSize = new System.Drawing.Size(584, 462);
this.Controls.Add(this.numericUpDownColors);
this.Controls.Add(this.labelSummary);
this.Controls.Add(this.labelSummaryHeader);
this.Controls.Add(this.buttonStart);
this.Controls.Add(this.labelColorToClick);
this.Controls.Add(this.flowLayoutPanel);
this.Name = "Form1";
((System.ComponentModel.ISupportInitialize)(this.errorProviderWrongButton)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownColors)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel;
private System.Windows.Forms.Label labelColorToClick;
private System.Windows.Forms.Button buttonStart;
private System.Windows.Forms.Label labelSummaryHeader;
private System.Windows.Forms.Label labelSummary;
private System.Windows.Forms.ErrorProvider errorProviderWrongButton;
private System.Windows.Forms.NumericUpDown numericUpDownColors;
}

I think your problem here is that the resolution of DateTime is less than the intervals that you are trying to measure.
Instead of using DateTime, try the following:
Create a private Stopwatch field called stopwatch.
Stopwatch stopwatch = new Stopwatch();
Then change your tick handler to:
private void timMessung_Tick(object sender, EventArgs e)
{
if (timMessung.Enabled == true)
{
stopwatch.Restart();
}
else
{
ts.stopwatch.Elapsed();
}
}
However, I'm also not sure about your logic to do with when you restart the stopwatch. (Where I put stopwatch.Restart().) Do you really want to keep restarting the stopwatch at that point?

use:
ts = Time1.subtract(Time2);
How to calculate datetime diffrence:
How to calculate hours between 2 different dates in c#

Related

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

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;
}
}
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.
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;
}
}
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();
}
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;
}
}

Require help in C# Need to implement moving picture box

I need a help on this,
There are 3 picture boxes, red should grow its Width to left, green should grow its height to top blue's width to right
also if one reaches the top border / any text boxes it should give an error / stop execution
I need to add more picture boxes in future and if two of them collides it should give an error / stop execution. I have managed to code them to go up, however unable to get other functions working. Please some one help me with this.
OR
https://www.box.com/s/d0d302c6c266f52e0abf
Thank you.
RR
My code below,
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;
using System.Threading;
namespace ThreadwithmovingPicbxmoving
{
public partial class Form1 : Form
{
Thread t1;
Thread t2;
Thread t3;
delegate void CTMethod(int val);
delegate void CTFinish(string t);
Queue<string> order = new Queue<string>();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int r = int.Parse(textBox1.Text);
int y = int.Parse(textBox2.Text);
int g = int.Parse(textBox3.Text);
t1 = new Thread(new ParameterizedThreadStart(loopred));
t2 = new Thread(new ParameterizedThreadStart(loopyel));
t3 = new Thread(new ParameterizedThreadStart(loopGree));
t1.Start(r);
t2.Start(y);
t3.Start(g);
}
private void updateRed(int val)
{
pictureBox1.Height = val;
pictureBox1.Refresh();
}
private void updateyell(int val)
{
pictureBox2.Height = val;
pictureBox2.Refresh();
}
private void updategree(int val)
{
pictureBox3.Height = val;
pictureBox3.Refresh();
}
private void loopred(object o)
{
int c = (int)o;
CTMethod ctred = new CTMethod(updateRed);
if (c < 500)
{
for (int i = 0; i < c; i++)
{
this.Invoke(ctred, i);
Thread.Sleep(20);
}
}
else
{
MessageBox.Show("Enter a value less than 500 for Red Box!!!");
}
CTFinish CTFin = new CTFinish(Threadfinish);
this.Invoke(CTFin, "Red");
}
private void loopyel(object o)
{
int c = (int)o;
CTMethod ctyell = new CTMethod(updateyell);
if (c < 500)
{
for (int i = 0; i < c; i++)
{
this.Invoke(ctyell, i);
Thread.Sleep(20);
}
}
else
{
MessageBox.Show("Enter a valure less than 500 for Yellow Box!!!");
}
CTFinish CTFin = new CTFinish(Threadfinish);
this.Invoke(CTFin, "Yell");
}
private void loopGree(object o)
{
int c = (int)o;
CTMethod ctgree = new CTMethod(updategree);
if (c < 500)
{
for (int i = 0; i < c; i++)
{
this.Invoke(ctgree, i);
Thread.Sleep(20);
}
}
else
{
MessageBox.Show("Enter a valure less than 500 for Green Box!!!");
}
CTFinish CTfin = new CTFinish(Threadfinish);
this.Invoke(CTfin, "Green");
}
private void Threadfinish(string t)
{
order.Enqueue(t);
if (order.Count == 3)
{
MessageBox.Show("Threads finished in this order: \n" + "1." + order.Dequeue() + "\n" + "2." + order.Dequeue()
+ "\n" + "3." + order.Dequeue() + "\n", "finished");
}
}
}
}
Try It. Its All Fine with three PictureBoxes
Create New Widows Application with name help and then replace Form1.cs code with Following
Run It. It also includes values from TextBoxes
using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using System.Collections.Generic;
namespace help
{
public partial class Form1 : Form
{
Thread t1;
Thread t2;
Thread t3;
delegate void CTMethod(int val);
delegate void CTFinish(string t);
Queue<string> order = new Queue<string>();
#region Variables of Designer File
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.PictureBox pictureBox3;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Button button1;
#endregion
public Form1()
{
#region Designer Code I have Cut and Pasted Here
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox3 = new System.Windows.Forms.PictureBox();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
this.SuspendLayout();
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.pictureBox3);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.pictureBox1);
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.Red;
this.pictureBox1.Location = new System.Drawing.Point(161, 268);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(100, 50);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// pictureBox2
//
this.pictureBox2.BackColor = System.Drawing.Color.Green;
this.pictureBox2.Location = new System.Drawing.Point(383, 268);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(100, 50);
this.pictureBox2.TabIndex = 1;
this.pictureBox2.TabStop = false;
//
// pictureBox3
//
this.pictureBox3.BackColor = System.Drawing.Color.Blue;
this.pictureBox3.Location = new System.Drawing.Point(605, 268);
this.pictureBox3.Name = "pictureBox3";
this.pictureBox3.Size = new System.Drawing.Size(100, 50);
this.pictureBox3.TabIndex = 2;
this.pictureBox3.TabStop = false;
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(161, 26);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 3;
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(383, 25);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(100, 20);
this.textBox2.TabIndex = 4;
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(605, 26);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(100, 20);
this.textBox3.TabIndex = 5;
//
// button1
//
this.button1.Location = new System.Drawing.Point(37, 23);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 6;
this.button1.Text = "Go";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
this.PerformLayout();
#endregion
InitializeComponent();
textBox1.Text = "490";
textBox2.Text = "490";
textBox3.Text = "490";
textBox1.Leave += new EventHandler(textBox1_Leave);
textBox2.Leave += new EventHandler(textBox2_Leave);
textBox3.Leave += new EventHandler(textBox3_Leave);
}
// To input Only Valid int values in TextBoxes
#region TextBoxes Input Validation
int t1Val = 490;
int t2Val = 490;
int t3Val = 490;
void textBox1_Leave(object sender, EventArgs e)
{
try
{
int t1Val = Convert.ToInt32(textBox1.Text);
}
catch
{
textBox1.Focus();
}
}
void textBox2_Leave(object sender, EventArgs e)
{
try
{
int t2Val = Convert.ToInt32(textBox2.Text);
}
catch
{
textBox2.Focus();
}
}
void textBox3_Leave(object sender, EventArgs e)
{
try
{
int t3Val = Convert.ToInt32(textBox3.Text);
}
catch
{
textBox3.Focus();
}
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
int r = t1Val;
int y = t2Val;
int g = t3Val;
t1 = new Thread(new ParameterizedThreadStart(loopRed));
t2 = new Thread(new ParameterizedThreadStart(loopGreen));
t3 = new Thread(new ParameterizedThreadStart(loopBlue));
// It will avoid proble if you exit app when threads are working
t1.IsBackground = true;
t2.IsBackground = true;
t3.IsBackground = true;
t1.Start(r);
t2.Start(y);
t3.Start(g);
}
private void updateRed(int val)
{
pictureBox1.Width++;
pictureBox1.Left--;
pictureBox1.Refresh();
}
private void updateGreen(int val)
{
pictureBox2.Height++;
pictureBox2.Top--;
pictureBox2.Refresh();
}
private void updateBlue(int val)
{
pictureBox3.Width++;
pictureBox3.Refresh();
}
private void loopRed(object o)
{
int c = (int)o;
CTMethod ctRed = new CTMethod(updateRed);
if (c < 500)
{
for (int i = 0; i < c; i++)
{
if (pictureBox1.Left > 0)
{
this.Invoke(ctRed, i);
Thread.Sleep(20);
}
}
}
else
{
MessageBox.Show("Enter a value less than 500 for Red Box!!!");
}
CTFinish CTFin = new CTFinish(Threadfinish);
this.Invoke(CTFin, "Red");
}
private void loopGreen(object o)
{
int c = (int)o;
CTMethod ctGreen = new CTMethod(updateGreen);
if (c < 500)
{
for (int i = 0; i < c; i++)
{
if (pictureBox2.Top > 0 && pictureBox2.Top != textBox2.Top + textBox2.Height)
{
this.Invoke(ctGreen, i);
Thread.Sleep(20);
}
else
break;
}
}
else
{
MessageBox.Show("Enter a valure less than 500 for Green Box!!!");
}
CTFinish CTFin = new CTFinish(Threadfinish);
this.Invoke(CTFin, "Green");
}
private void loopBlue(object o)
{
int c = (int)o;
CTMethod ctBlue = new CTMethod(updateBlue);
if (c < 500)
{
for (int i = 0; i < c; i++)
{
if (pictureBox3.Left + pictureBox3.Width < this.Width)
{
this.Invoke(ctBlue, i);
Thread.Sleep(20);
}
else
break;
}
}
else
{
MessageBox.Show("Enter a valure less than 500 for Blue Box!!!");
}
CTFinish CTfin = new CTFinish(Threadfinish);
this.Invoke(CTfin, "Blue");
}
private void Threadfinish(string t)
{
order.Enqueue(t);
if (order.Count == 3)
{
MessageBox.Show("Threads finished in this order: \n" + "1." + order.Dequeue() + "\n" + "2." + order.Dequeue()
+ "\n" + "3." + order.Dequeue() + "\n", "finished");
}
}
}
}

C# Listbox Drag and Drop Rows

I'm trying to implement a C# drag and drop row-reorder with a listbox. I've come across some snippets of code on the internet but none seem to be working with my needs.
I want you to show me an example code of how to move rows in ListBox.
Thanks!
The moving of rows is done in methods "listBox1_MouseUp and listBox1_MouseDown.
Use view code to change this:
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 Calculator
{
public partial class ComponentMover : Form
{
private Control trackedControl;
private int gridWidth = 100, gridHeight = 20;
private int row;
public ComponentMover()
{
this.InitializeComponent();
this.InitializeDynamic();
}
void draggable_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (this.trackedControl == null)
this.trackedControl = (Control)sender;
}
void draggable_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (this.trackedControl != null)
{
int x = e.X + this.trackedControl.Location.X;
int y = e.Y + this.trackedControl.Location.Y;
Point moved = new Point(x - x % this.gridWidth, y - y % this.gridHeight);
Console.WriteLine(e.X + ", " + e.Y + ", " + ", " + moved.X + ", " + moved.Y);
if (moved != this.trackedControl.Location)
this.trackedControl.Location = moved;
}
}
void draggable_MouseUp(object sender, MouseEventArgs e)
{
this.trackedControl = null;
}
private void AddDragListeners(Control draggable)
{
draggable.MouseDown += new MouseEventHandler(draggable_MouseDown);
draggable.MouseMove += new MouseEventHandler(draggable_MouseMove);
draggable.MouseUp += new MouseEventHandler(draggable_MouseUp);
}
}
}
Designer code:
namespace Calculator
{
// Designer code.
partial class ComponentMover
{
/// <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);
}
private void InitializeDynamic()
{
this.AddDragListeners(button1);
this.AddDragListeners(button4);
this.AddDragListeners(domainUpDown1);
this.AddDragListeners(textBox1);
this.AddDragListeners(checkBox1);
this.AddDragListeners(radioButton1);
}
#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()
{
this.button1 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.domainUpDown1 = new System.Windows.Forms.DomainUpDown();
this.textBox1 = new System.Windows.Forms.TextBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.radioButton1 = new System.Windows.Forms.RadioButton();
this.listBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(13, 13);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
//
// button4
//
this.button4.Location = new System.Drawing.Point(177, 43);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(75, 23);
this.button4.TabIndex = 3;
this.button4.Text = "button4";
this.button4.UseVisualStyleBackColor = true;
//
// domainUpDown1
//
this.domainUpDown1.Location = new System.Drawing.Point(95, 42);
this.domainUpDown1.Name = "domainUpDown1";
this.domainUpDown1.Size = new System.Drawing.Size(74, 20);
this.domainUpDown1.TabIndex = 4;
this.domainUpDown1.Text = "domainUpDown1";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(177, 72);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(100, 20);
this.textBox1.TabIndex = 5;
//
// checkBox1
//
this.checkBox1.AutoSize = true;
this.checkBox1.Location = new System.Drawing.Point(281, 13);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(80, 17);
this.checkBox1.TabIndex = 6;
this.checkBox1.Text = "checkBox1";
this.checkBox1.UseVisualStyleBackColor = true;
//
// radioButton1
//
this.radioButton1.AutoSize = true;
this.radioButton1.Location = new System.Drawing.Point(366, 42);
this.radioButton1.Name = "radioButton1";
this.radioButton1.Size = new System.Drawing.Size(85, 17);
this.radioButton1.TabIndex = 7;
this.radioButton1.TabStop = true;
this.radioButton1.Text = "radioButton1";
this.radioButton1.UseVisualStyleBackColor = true;
//
// listBox1
//
this.listBox1.FormattingEnabled = true;
this.listBox1.Items.AddRange(new object[] {
"word1",
"word2",
"word3"});
this.listBox1.Location = new System.Drawing.Point(13, 42);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(76, 82);
this.listBox1.TabIndex = 8;
this.listBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(listBox1_MouseDown);
this.listBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(listBox1_MouseUp);
//
// ComponentMover
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(485, 159);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.radioButton1);
this.Controls.Add(this.checkBox1);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.domainUpDown1);
this.Controls.Add(this.button4);
this.Controls.Add(this.button1);
this.Name = "ComponentMover";
this.Text = "ComponentMover";
this.ResumeLayout(false);
this.PerformLayout();
}
void listBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
System.Windows.Forms.ListBox list = (System.Windows.Forms.ListBox)sender;
int swap = list.SelectedIndex;
if(swap != this.row)
{
string temp = (string)list.Items[this.row];
list.Items[this.row] = list.Items[swap];
list.Items[swap] = temp;
}
}
void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.row = ((System.Windows.Forms.ListBox)sender).SelectedIndex;
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.DomainUpDown domainUpDown1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.CheckBox checkBox1;
private System.Windows.Forms.RadioButton radioButton1;
private System.Windows.Forms.ListBox listBox1;
}
}

Windows Forms C# "Input string was not in a correct format"

I have a simple Windows Forms application which is used to calculate the solutions to a quadratic equation. Since it requires some values to be inputted into three different textboxes and then upon clicking a "Calculate" button, makes some calculations with the inputted values. Upon testing the application, and clicking the "Calculate" button prior to inputting any values, I get a Input string was not in a correct format This is due to trying to parse a non-existent value. Is there any way to avoid this? I tried to construct a conditional based on if the button was clicked and there was no values in the textboxes, to not do anything, but that didn't quite work. Here is my designer code:
namespace QuadraticSolver
{
partial class QuadraticSolver
{
/// <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()
{
this.lblPrompt = new System.Windows.Forms.Label();
this.lblA = new System.Windows.Forms.Label();
this.lblB = new System.Windows.Forms.Label();
this.lblC = new System.Windows.Forms.Label();
this.txtA = new System.Windows.Forms.TextBox();
this.txtB = new System.Windows.Forms.TextBox();
this.txtC = new System.Windows.Forms.TextBox();
this.btnCalculate = new System.Windows.Forms.Button();
this.lblSolutions = new System.Windows.Forms.Label();
this.txtSolution1 = new System.Windows.Forms.TextBox();
this.txtSolution2 = new System.Windows.Forms.TextBox();
this.chkImaginary = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// lblPrompt
//
this.lblPrompt.AutoSize = true;
this.lblPrompt.Location = new System.Drawing.Point(12, 9);
this.lblPrompt.Name = "lblPrompt";
this.lblPrompt.Size = new System.Drawing.Size(92, 13);
this.lblPrompt.TabIndex = 0;
this.lblPrompt.Text = "Enter Your Values";
//
// lblA
//
this.lblA.AutoSize = true;
this.lblA.Location = new System.Drawing.Point(12, 49);
this.lblA.Name = "lblA";
this.lblA.Size = new System.Drawing.Size(16, 13);
this.lblA.TabIndex = 1;
this.lblA.Text = "a:";
//
// lblB
//
this.lblB.AutoSize = true;
this.lblB.Location = new System.Drawing.Point(12, 85);
this.lblB.Name = "lblB";
this.lblB.Size = new System.Drawing.Size(16, 13);
this.lblB.TabIndex = 2;
this.lblB.Text = "b:";
//
// lblC
//
this.lblC.AutoSize = true;
this.lblC.Location = new System.Drawing.Point(12, 122);
this.lblC.Name = "lblC";
this.lblC.Size = new System.Drawing.Size(16, 13);
this.lblC.TabIndex = 3;
this.lblC.Text = "c:";
//
// txtA
//
this.txtA.Location = new System.Drawing.Point(34, 46);
this.txtA.Name = "txtA";
this.txtA.Size = new System.Drawing.Size(360, 20);
this.txtA.TabIndex = 4;
//
// txtB
//
this.txtB.Location = new System.Drawing.Point(34, 82);
this.txtB.Name = "txtB";
this.txtB.Size = new System.Drawing.Size(360, 20);
this.txtB.TabIndex = 5;
//
// txtC
//
this.txtC.Location = new System.Drawing.Point(34, 122);
this.txtC.Name = "txtC";
this.txtC.Size = new System.Drawing.Size(360, 20);
this.txtC.TabIndex = 6;
//
// btnCalculate
//
this.btnCalculate.Location = new System.Drawing.Point(175, 154);
this.btnCalculate.Name = "btnCalculate";
this.btnCalculate.Size = new System.Drawing.Size(75, 23);
this.btnCalculate.TabIndex = 7;
this.btnCalculate.Text = "Calculate!";
this.btnCalculate.UseVisualStyleBackColor = true;
this.btnCalculate.Click += new System.EventHandler(this.btnCalculate_Click);
//
// lblSolutions
//
this.lblSolutions.AutoSize = true;
this.lblSolutions.Location = new System.Drawing.Point(31, 226);
this.lblSolutions.Name = "lblSolutions";
this.lblSolutions.Size = new System.Drawing.Size(53, 13);
this.lblSolutions.TabIndex = 8;
this.lblSolutions.Text = "Solutions:";
//
// txtSolution1
//
this.txtSolution1.Location = new System.Drawing.Point(34, 242);
this.txtSolution1.Name = "txtSolution1";
this.txtSolution1.ReadOnly = true;
this.txtSolution1.Size = new System.Drawing.Size(165, 20);
this.txtSolution1.TabIndex = 9;
//
// txtSolution2
//
this.txtSolution2.Location = new System.Drawing.Point(222, 242);
this.txtSolution2.Name = "txtSolution2";
this.txtSolution2.ReadOnly = true;
this.txtSolution2.Size = new System.Drawing.Size(172, 20);
this.txtSolution2.TabIndex = 10;
//
// chkImaginary
//
this.chkImaginary.AutoSize = true;
this.chkImaginary.Location = new System.Drawing.Point(33, 189);
this.chkImaginary.Name = "chkImaginary";
this.chkImaginary.Size = new System.Drawing.Size(71, 17);
this.chkImaginary.TabIndex = 11;
this.chkImaginary.Text = "Imaginary";
this.chkImaginary.UseVisualStyleBackColor = true;
//
// QuadraticSolver
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(406, 285);
this.Controls.Add(this.chkImaginary);
this.Controls.Add(this.txtSolution2);
this.Controls.Add(this.txtSolution1);
this.Controls.Add(this.lblSolutions);
this.Controls.Add(this.btnCalculate);
this.Controls.Add(this.txtC);
this.Controls.Add(this.txtB);
this.Controls.Add(this.txtA);
this.Controls.Add(this.lblC);
this.Controls.Add(this.lblB);
this.Controls.Add(this.lblA);
this.Controls.Add(this.lblPrompt);
this.Name = "QuadraticSolver";
this.Text = "Quadratic Solver";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblPrompt;
private System.Windows.Forms.Label lblA;
private System.Windows.Forms.Label lblB;
private System.Windows.Forms.Label lblC;
private System.Windows.Forms.TextBox txtA;
private System.Windows.Forms.TextBox txtB;
private System.Windows.Forms.TextBox txtC;
private System.Windows.Forms.Button btnCalculate;
private System.Windows.Forms.Label lblSolutions;
private System.Windows.Forms.TextBox txtSolution1;
private System.Windows.Forms.TextBox txtSolution2;
private System.Windows.Forms.CheckBox chkImaginary;
}
}
Here is my program's code which does the actual data manipulation:
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 QuadraticSolver
{
public partial class QuadraticSolver : Form
{
public QuadraticSolver()
{
InitializeComponent();
}
private void btnCalculate_Click(object sender, EventArgs e)
{
if (txtA.Text == "" || txtB.Text == "" || txtC.Text == "")
{
string stringSol = "Please enter some values!";
txtSolution1.Text = stringSol;
txtSolution2.Text = stringSol;
}
double aValue = double.Parse(txtA.Text);
double bValue = double.Parse(txtB.Text);
double cValue = double.Parse(txtC.Text);
double solution1Double, solution2Double;
//Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac)) / 2a
//Calculate discriminant
double insideSquareRoot = (bValue * bValue) - 4 * aValue * cValue;
if (insideSquareRoot < 0)
{
//No real solution
solution1Double = Double.NaN;
solution2Double = Double.NaN;
txtSolution1.Text = solution1Double.ToString();
txtSolution2.Text = solution2Double.ToString();
}
else if (insideSquareRoot == 0)
{
//One real solution
double sqrtOneSolution = Math.Sqrt(insideSquareRoot);
solution1Double = (-bValue + sqrtOneSolution) / (2 * aValue);
solution2Double = double.NaN;
txtSolution1.Text = solution1Double.ToString();
txtSolution2.Text = solution2Double.ToString();
}
else if (insideSquareRoot > 0)
{
//Two real solutions
double sqrtTwoSolutions = Math.Sqrt(insideSquareRoot);
solution1Double = (-bValue + sqrtTwoSolutions) / (2 * aValue);
solution2Double = (-bValue - sqrtTwoSolutions) / (2 * aValue);
txtSolution1.Text = solution1Double.ToString();
txtSolution2.Text = solution2Double.ToString();
}
}
}
}
You can use the double.TryParse method.
This is better than checking for == "" since it will tell you that you can not parse "Hello" as a double too.
You also need to return from the event handler if one of the TryParse returns false.
You may consider using a NumericUpDown control instead. You are guaranteed the input from this control will be numeric. All the code that is required is then:
double userNumber = myNumUpDown.Value;
You can even restrict the number input to ensure it falls within your defined range
myNumUpDown.Minimum = 300;
myNumUpDown.Maximum = 500;
Along with many other things. Finally, it even comes with up/down GUI controls so your users can be super lazy and enter the number with their mouse!
You can try this format,
replace the textbox1 with your textbox name.
int a = textbox1.Text != "" ? Convert.ToInt32(textbox1.Text) : 0;
int b = textbox2.Text != "" ? Convert.ToInt32(textbox2.Text) : 0;
int total = a + b;
you can reassign the result this way:
textbox3 = total.toString();
if (txtA.Text == "" || txtB.Text == "" || txtC.Text == "")
{
string stringSol = "Please enter some values!";
txtSolution1.Text = stringSol;
txtSolution2.Text = stringSol;
return;
}

Performance Counter Category Names? (C#)

I'm trying to program in a performance counter into my C# application that launches another process and checks the processor usage of that launched process. As I understand it, the performance counter class requires me to assign a category name , a counter name, and a process name. I can get the process name easily enough, but is there a list of some sort on the internet that has all possible category and counter names I can assign? I tried scouring MSDN for something like this, but I didn't find anything.
Thanks for all the help!
I think you want to know what aspects of the process you can monitor. A list of the Process Performance Counters is available here.
Nevertheless, you can use the GetCategories static method to list all categories in the machine or you could be more specific and create the PerformanceCategory for the "Process" category and use the GetCounters to get a list of all counters available.
Hope this helps.
For those who want to quickly browse and find needed Counter here's a quick Form that displays three list boxes with |Categories|Instances|Counters| and a Counter Value that is updated on a timer. With filters.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
namespace CountersListPreview
{
internal static class CounterPreview
{
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form f = new CountersListPreviewForm();
Application.Run(f);
}
}
internal class CountersListPreviewForm : Form
{
public CountersListPreviewForm()
{
InitializeComponent();
}
private PerformanceCounterCategory[] allCats;
private string[] instances;
private PerformanceCounter[] counters;
private PerformanceCounter counter;
private Timer TitleRefreshTimer;
private void Form1_Load(object sender, EventArgs e)
{
allCats = PerformanceCounterCategory.GetCategories();
listBox1.DataSource = allCats;
listBox1.DisplayMember = "CategoryName";
listBox1.SelectedIndexChanged += On_CatChange;
listBox2.SelectedIndexChanged += On_InstChange;
listBox3.SelectedIndexChanged += On_CounterChange;
textBox2.TextChanged += On_CatFilterChanged;
textBox3.TextChanged += On_InstFilterChanged;
textBox4.TextChanged += On_CounterFilterChanged;
TitleRefreshTimer = new Timer();
TitleRefreshTimer.Tick += On_Timer;
TitleRefreshTimer.Interval = 500;
TitleRefreshTimer.Start();
}
private void On_Timer(object sender, EventArgs e)
{
textBox1.Text = counter != null ? counter.NextValue().ToString() : "";
}
// --------------- SELECTION CHANGE ------------------
private void On_CatChange(object sender, EventArgs e)
{
var cat = listBox1.SelectedItem as PerformanceCounterCategory;
listBox2.DataSource = instances = cat.GetInstanceNames();
}
private void On_InstChange(object sender, EventArgs e)
{
var cat = listBox1.SelectedItem as PerformanceCounterCategory;
var inst = listBox2.SelectedItem as string;
listBox3.DataSource = counters = cat.GetCounters(inst);
listBox3.DisplayMember = "CounterName";
}
private void On_CounterChange(object sender, EventArgs e)
{
counter = listBox3.SelectedItem as PerformanceCounter;
On_Timer(null, null);
}
// --------------- FILTERS ------------------
private void On_CatFilterChanged(object sender, EventArgs e)
{
var filter = textBox2.Text;
listBox1.DataSource = !string.IsNullOrEmpty(filter)
? allCats.Where(cat => cat.CategoryName.ToLower().Contains(filter.ToLower())).ToArray()
: allCats;
}
private void On_InstFilterChanged(object sender, EventArgs e)
{
var filter = textBox3.Text;
listBox2.DataSource = !string.IsNullOrEmpty(filter)
? instances.Where(inst => inst.ToLower().Contains(filter.ToLower())).ToArray()
: instances;
}
private void On_CounterFilterChanged(object sender, EventArgs e)
{
var filter = textBox4.Text;
listBox3.DataSource = !string.IsNullOrEmpty(filter)
? counters.Where(c => c.CounterName.ToLower().Contains(filter.ToLower())).ToArray()
: counters;
}
// --------------- FORM AND LAYOUT ------------------
private readonly IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && components != null) components.Dispose();
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.listBox1 = new System.Windows.Forms.ListBox();
this.listBox2 = new System.Windows.Forms.ListBox();
this.listBox3 = new System.Windows.Forms.ListBox();
this.textBox1 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.textBox4 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(12, 38);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(351, 524);
this.listBox1.TabIndex = 3;
//
// listBox2
//
this.listBox2.FormattingEnabled = true;
this.listBox2.Location = new System.Drawing.Point(369, 38);
this.listBox2.Name = "listBox2";
this.listBox2.Size = new System.Drawing.Size(351, 524);
this.listBox2.TabIndex = 3;
//
// listBox3
//
this.listBox3.FormattingEnabled = true;
this.listBox3.Location = new System.Drawing.Point(726, 38);
this.listBox3.Name = "listBox3";
this.listBox3.Size = new System.Drawing.Size(351, 524);
this.listBox3.TabIndex = 3;
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(726, 568);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(351, 20);
this.textBox1.TabIndex = 4;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(606, 571);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(114, 13);
this.label1.TabIndex = 5;
this.label1.Text = "Counter Value (500ms)";
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(12, 12);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(351, 20);
this.textBox2.TabIndex = 4;
//
// textBox3
//
this.textBox3.Location = new System.Drawing.Point(369, 12);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(351, 20);
this.textBox3.TabIndex = 4;
//
// textBox4
//
this.textBox4.Location = new System.Drawing.Point(726, 12);
this.textBox4.Name = "textBox4";
this.textBox4.Size = new System.Drawing.Size(351, 20);
this.textBox4.TabIndex = 4;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
//this.BackColor = System.Drawing.SystemColors.;
this.ClientSize = new System.Drawing.Size(1090, 597);
this.Controls.Add(this.label1);
this.Controls.Add(this.textBox4);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.listBox3);
this.Controls.Add(this.listBox2);
this.Controls.Add(this.listBox1);
//this.ForeColor = System.Drawing.SystemColors.ControlLightLight;
this.Name = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private ListBox listBox1;
private ListBox listBox2;
private ListBox listBox3;
private TextBox textBox1;
private Label label1;
private TextBox textBox2;
private TextBox textBox3;
private TextBox textBox4;
}
}
I have created a method that show what CriGoT have writted above, a small shortcut.
private static void GetAllCounters(string categoryFilter)
{
var categories = PerformanceCounterCategory.GetCategories();
foreach (var cat in categories)
{
if (categoryFilter != null && categoryFilter.Length > 0)
{
if (!cat.CategoryName.Contains(categoryFilter)) continue;
}
Console.WriteLine("Category {0}", cat.CategoryName);
try
{
var instances = cat.GetInstanceNames();
if (instances != null && instances.Length > 0)
{
foreach (var instance in instances)
{
//if (cat.CounterExists(instance))
//{
foreach (var counter in cat.GetCounters(instance))
{
Console.WriteLine("\tCounter Name {0} [{1}]", counter.CounterName, instance);
}
//}
}
}
else
{
foreach (var counter in cat.GetCounters())
{
Console.WriteLine("\tCounter Name {0}", counter.CounterName);
}
}
}
catch (Exception)
{
// NO COUNTERS
}
}
Console.ReadLine();
}
:-)
You can assign them whatever you want. The Performance Monitor will simply show whatever category you choose and whatever counter name you choose for your particular need.
CounterCreationDataCollection ccdc = new CounterCreationDataCollection();
ccdc.Add(new CounterCreationData("Counter Title", "Counter Description", PerformanceCounterType.NumberOfItems32));
PerformanceCounterCategory.Create("My Counter Category", "Category Description", PerformanceCounterCategoryType.Unknown, ccdc);

Categories