I am unsure how to ask this question as I can't quite well translate it.
I am currently working on my own Windows Form Application that will calculate the dimensions of a given package in inches (written all together in string format) and calculate the dimensions in centimeters, milimeters or even meters and at this point I was wondering what if someone entered wrong dimensions and given measures can not be parsed.
Something like Environment.Exit(), but without closing the application just stopping calculations and writing a message that an error has occured.
If there is a question like this answered, please do link it because I haven't been able to find it.
namespace PretvaranjeDimenzija
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public double mjera = 1;
public bool pogreska = false;
public string mjeraKratica = " cm";
public string dimenzijeIspis = "";
private void buttonIzracunaj_Click(object sender, EventArgs e)
{
string dim = textBoxDimenzije.Text;
if (dim.Contains('.'))
{
dim = dim.Replace('.', ',');
}
if (dim.Length != 0)
{
if (dim.IndexOf('x') != -1)
{
string[] multiDim = dim.Split('x');
double[] multiDimCentimetara = new double[multiDim.Length];
bool[] uspjeh = new bool[multiDim.Length];
for (int i = 0; i < multiDim.Length; i++)
{
uspjeh[i] = double.TryParse(multiDim[i], out multiDimCentimetara[i]);
if (uspjeh[i] == false)
{
pogreska = true;
goto kraj;
}
}
kraj:
if (pogreska == true)
{
MessageBox.Show("Doslo je do pogreske!");
pogreska = false;
}
else
{
double[] dimenzije = new double[multiDim.Length];
for (int i = 0; i < dimenzije.Length; i++)
{
dimenzije[i] = multiDimCentimetara[i] * 2.54 * mjera;
if (i == dimenzije.Length - 1)
{
dimenzijeIspis += dimenzije[i].ToString() + mjeraKratica;
}
else
{
dimenzijeIspis += dimenzije[i].ToString() + "x";
}
}
textBoxIspisDimenzija.Text = dimenzijeIspis;
dimenzijeIspis = "";
}
}
else
{
double dimCentimetara;
if(double.TryParse(dim, out dimCentimetara))
{
double dimenzija = dimCentimetara * 2.54 * mjera;
dimenzijeIspis = dimenzija.ToString() + mjeraKratica;
textBoxIspisDimenzija.Text = dimenzijeIspis;
dimenzijeIspis = "";
}
else
{
MessageBox.Show("Doslo je do pogreske!");
return;
}
}
}
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
mjera = 0.01;
mjeraKratica = " m";
if (radioButton2.Checked == true)
{
radioButton2.Checked = false;
radioButton1.Checked = true;
}
if (radioButton3.Checked == true)
{
radioButton3.Checked = false;
radioButton1.Checked = true;
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
mjera = 1;
mjeraKratica = " cm";
if (radioButton1.Checked == true)
{
radioButton1.Checked = false;
radioButton2.Checked = true;
}
if (radioButton3.Checked == true)
{
radioButton3.Checked = false;
radioButton2.Checked = true;
}
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
mjera = 10;
mjeraKratica = " mm";
if (radioButton2.Checked == true)
{
radioButton2.Checked = false;
radioButton3.Checked = true;
}
if (radioButton1.Checked == true)
{
radioButton1.Checked = false;
radioButton3.Checked = true;
}
}
}
It should be pretty simple, depending on your requirements. For example, you could just use a basic if block in your method.
void CalculateStuff()
{
// Get input. Do stuff.
if (IsInvalid)
{
MessageBox.Show("You did a bad thing.");
return; // exit the method.
}
// now that we know the input is good, do other stuff.
}
Substitute IsInvalid with whatever check condition you want that will return true if the input is not valid.
Related
I'm not sure what is going on. I thought I had it set up to clear the output label at the end. Everytime I clear it, the program still remembers the previous number and adds to it. I honestly have no idea what is going on.
Also on a side note, how do I put set up radiobuttons to be used in the this method?
First coding class so i'm still kind of a beginner.
private double oilandlube()
{
if (checkBox1.Checked == true)
{
Oil_change = 26;
}
if (checkBox2.Checked == true)
{
Lube_job = 18;
}
return Oil_change + Lube_job;
}
private void Oiltype ()
{
if (radioButton1.Checked)
{
Regular = 0;
}
if (radioButton2.Checked)
{
Mixed = 10;
}
else
{
Mixed = 0;
}
if (radioButton3.Checked)
{
Full_Synthetic = 18;
}
else
{
Full_Synthetic = 0;
}
}
private void carwash()
{
if (radioButton4.Checked)
{
none = 0;
}
if (radioButton5.Checked)
{
complimentary = 0;
}
if (radioButton6.Checked)
{
Full_service = 6;
}
else
{
Full_service = 0;
}
if (radioButton7.Checked)
{
Premium = 9;
}
else
{
Premium = 0;
}
}
private double flushes()
{
if (checkBox3.Checked == true)
{
Radiator_flush = 30;
}
if (checkBox4.Checked == true)
{
Transmission_flush = 80;
}
return Radiator_flush + Transmission_flush;
}
private double misc()
{
if (checkBox5.Checked == true)
{
inspection = 15;
}
if (checkBox6.Checked == true)
{
replace_muffler = 100;
}
if (checkBox7.Checked == true)
{
tire_rotation = 20;
}
return inspection + replace_muffler;
}
private double partsandlabor()
{
double.TryParse(textBox1.Text, out parts);
double.TryParse(textBox2.Text, out labor);
return parts + labor;
}
private double tax()
{
return partsandlabor() * taxes;
}
private void summary()
{
service = oilandlube() + flushes() + misc();
total_parts = partsandlabor();
double total_tax = tax();
double grand_total = service + total_parts + total_tax;
label7.Text = service.ToString("c");
label8.Text = total_parts.ToString("c");
label9.Text = total_tax.ToString("c");
label10.Text = grand_total.ToString("c");
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
oilandlube();
carwash();
flushes();
misc();
partsandlabor();
summary();
}
private void ClearOilandlube()
{
checkBox1.Checked = false;
checkBox2.Checked = false;
}
private void ClearMisc()
{
checkBox5.Checked = false;
checkBox6.Checked = false;
checkBox7.Checked = false;
}
private void ClearFlushes()
{
checkBox3.Checked = false;
checkBox4.Checked = false;
}
private void ClearSummary()
{
label7.Text = "";
label8.Text = "";
label9.Text = "";
label10.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
ClearOilandlube();
ClearMisc();
ClearFlushes();
ClearSummary();
radioButton1.Checked = false;
radioButton2.Checked = false;
radioButton3.Checked = false;
radioButton4.Checked = false;
radioButton5.Checked = false;
radioButton6.Checked = false;
radioButton7.Checked = false;
textBox1.Text = "0";
textBox2.Text = "0";
}
}
}
When you clear the contents of your controls, you should also clear the values of the backing variables, so they don't retain their previous values. You should be able to just set them back to zero in your Clear methods.
For example, oil and lube might look like:
private void ClearOilandlube()
{
checkBox1.Checked = false;
checkBox2.Checked = false;
Oil_change = 0;
Lube_job = 0;
Mixed = 0;
Regular = 0;
Full_Synthetic = 0;
}
It looks like you're holding state of some your variables globally so you can access them elsewhere.
Mixed = 10;
You'll have to reset that to some default value as well.
I have a list of numberes, and I want to make a RichTextBox with autocomplete, so when the user start typing a number, it will give him autocomplete options from the list.
And I want it to be in a RichTextBox because I want the user to be able writing each number in a new line in the RichTextBox, so everytime the user presses enter, it will do the whole autocomplete thing all over again.
I don't really have an idea how to et this ting done.
any help would be very thankfull.
Thanks
I'll paste the code here. I never got the positioning of the box correct, so you will have to play around with the YOffset and the XOffset.
In your form OnLoad:
intellisenseRichTextBox.IntellisenseWords = new string[] { "Test", "Foo", "Bar", "Supercalifragilisticexpialidocious" };
intellisenseRichTextBox.YOffset = 132;
intellisenseRichTextBox.XOffset = 70;
And the classes:
public class NotificationForm : Form
{
public NotificationForm()
{
this.ShowInTaskbar = false;
//this.Enabled = true;
this.FormBorderStyle = FormBorderStyle.None;
}
protected override bool ShowWithoutActivation
{
get
{
return true;
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams baseParams = base.CreateParams;
const int WS_EX_NOACTIVATE = 0x08000000;
const int WS_EX_TOOLWINDOW = 0x00000080;
baseParams.ExStyle |= (int)(WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW);
return baseParams;
}
}
}
public class RichTextBoxIntellisense : RichTextBox
{
private NotificationForm intelliAutoCompleteForm;
private ListBox intelliAutoCompleteListBox;
private bool IsNotificationFormShowing;
private bool IsFromReplaceTab;
private bool IsFromMouseClick;
private int _suggestionCount = 20;
public string[] IntellisenseWords { get; set; }
public int YOffset { get; set; }
public int XOffset { get; set; }
public int SuggestionCount
{
get
{
return _suggestionCount;
}
set
{
_suggestionCount = value;
}
}
public RichTextBoxIntellisense()
{
this.AcceptsTab = true;
this.YOffset = 30;
intelliAutoCompleteForm = new NotificationForm();
intelliAutoCompleteForm.Size = new Size(200, 200);
intelliAutoCompleteForm.TopMost = true;
intelliAutoCompleteListBox = new ListBox();
intelliAutoCompleteListBox.Dock = DockStyle.Fill;
intelliAutoCompleteForm.Controls.Add(intelliAutoCompleteListBox);
this.TextChanged += RichTextBoxIntellisense_TextChanged;
this.KeyDown += RichTextBoxIntellisense_KeyDown;
this.KeyPress += RichTextBoxIntellisense_KeyPress;
this.SelectionChanged += RichTextBoxIntellisense_SelectionChanged;
intelliAutoCompleteListBox.Click += IntelliAutoCompleteListBox_Click;
intelliAutoCompleteListBox.SelectedIndexChanged += IntelliAutoCompleteListBox_SelectedIndexChanged;
intelliAutoCompleteForm.Show();
intelliAutoCompleteForm.Hide();
}
private void IntelliAutoCompleteListBox_SelectedIndexChanged(object sender, EventArgs e)
{
if(IsFromMouseClick)
{
if (intelliAutoCompleteListBox.SelectedIndex >= 0)
{
ReplaceCurrentWordWith(intelliAutoCompleteListBox.SelectedItem.ToString());
IsFromReplaceTab = false;
}
}
IsFromMouseClick = false;
}
private void IntelliAutoCompleteListBox_Click(object sender, EventArgs e)
{
IsFromMouseClick = true;
}
private void RichTextBoxIntellisense_SelectionChanged(object sender, EventArgs e)
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
private void RichTextBoxIntellisense_KeyPress(object sender, KeyPressEventArgs e)
{
if (IsFromReplaceTab)
{
e.Handled = true;
IsFromReplaceTab = false;
}
else
{
if(e.KeyChar == (char)Keys.Escape)
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
e.Handled = true;
}
}
}
private void RichTextBoxIntellisense_KeyDown(object sender, KeyEventArgs e)
{
if (IsNotificationFormShowing)
{
if (e.KeyCode == Keys.Up)
{
if(intelliAutoCompleteListBox.Items.Count > 0)
{
if(intelliAutoCompleteListBox.SelectedIndex < 0)
{
intelliAutoCompleteListBox.SelectedIndex = 0;
}
else if(intelliAutoCompleteListBox.SelectedIndex > 0)
{
intelliAutoCompleteListBox.SelectedIndex = intelliAutoCompleteListBox.SelectedIndex - 1;
}
}
e.Handled = true;
}
else if (e.KeyCode == Keys.Down)
{
if (intelliAutoCompleteListBox.Items.Count > 0)
{
if (intelliAutoCompleteListBox.SelectedIndex < 0)
{
intelliAutoCompleteListBox.SelectedIndex = 0;
}
else if (intelliAutoCompleteListBox.SelectedIndex < intelliAutoCompleteListBox.Items.Count - 1)
{
intelliAutoCompleteListBox.SelectedIndex = intelliAutoCompleteListBox.SelectedIndex + 1;
}
}
e.Handled = true;
}
else if (e.KeyCode == Keys.Enter)
{
if(intelliAutoCompleteListBox.SelectedIndex >= 0)
{
ReplaceCurrentWordWith(intelliAutoCompleteListBox.SelectedItem.ToString());
}
e.Handled = true;
}
else if (e.KeyCode == Keys.Tab)
{
if (intelliAutoCompleteListBox.SelectedIndex >= 0)
{
ReplaceCurrentWordWith(intelliAutoCompleteListBox.SelectedItem.ToString());
}
e.Handled = true;
}
}
}
private void RichTextBoxIntellisense_TextChanged(object sender, EventArgs e)
{
if (IntellisenseWords != null && IntellisenseWords.Length > 0)
{
string wordText;
int lastIndexOfSpace;
int lastIndexOfNewline;
int lastIndexOfTab;
int lastIndexOf;
if(this.SelectionStart == this.Text.Length)
{
if(this.SelectionStart > 0 && this.Text[this.SelectionStart - 1] != ' ' && this.Text[this.SelectionStart - 1] != '\t' && this.Text[this.SelectionStart - 1] != '\n')
{
wordText = this.Text.Substring(0,this.SelectionStart);
lastIndexOfSpace = wordText.LastIndexOf(' ');
lastIndexOfNewline = wordText.LastIndexOf('\n');
lastIndexOfTab = wordText.LastIndexOf('\t');
lastIndexOf = Math.Max(Math.Max(lastIndexOfSpace,lastIndexOfNewline),lastIndexOfTab);
if (lastIndexOf >= 0)
{
wordText = wordText.Substring(lastIndexOf + 1);
}
if (PopulateIntelliListBox(wordText))
{
ShowAutoCompleteForm();
}
else
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
}
else
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
}
else
{
char currentChar = this.Text[this.SelectionStart];
if(this.SelectionStart > 0)
{
if(this.SelectionStart > 0 && this.Text[this.SelectionStart - 1] != ' ' && this.Text[this.SelectionStart - 1] != '\t' && this.Text[this.SelectionStart - 1] != '\n'
&& (this.Text[this.SelectionStart] == ' ' || this.Text[this.SelectionStart] == '\t' || this.Text[this.SelectionStart] == '\n'))
{
wordText = this.Text.Substring(0, this.SelectionStart);
lastIndexOfSpace = wordText.LastIndexOf(' ');
lastIndexOfNewline = wordText.LastIndexOf('\n');
lastIndexOfTab = wordText.LastIndexOf('\t');
lastIndexOf = Math.Max(Math.Max(lastIndexOfSpace, lastIndexOfNewline), lastIndexOfTab);
if (lastIndexOf >= 0)
{
wordText = wordText.Substring(lastIndexOf + 1);
}
if(PopulateIntelliListBox(wordText))
{
ShowAutoCompleteForm();
}
else
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
}
else
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
}
else
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
}
}
else
{
intelliAutoCompleteForm.Hide();
IsNotificationFormShowing = false;
}
}
private bool PopulateIntelliListBox(string wordTyping)
{
intelliAutoCompleteListBox.Items.Clear();
List<KeyValuePair<int, string>> tempWords = new List<KeyValuePair<int, string>>();
string[] outArray;
for(int i = 0; i < IntellisenseWords.Length; i++)
{
if(IntellisenseWords[i].StartsWith(wordTyping, StringComparison.CurrentCultureIgnoreCase))
{
tempWords.Add(new KeyValuePair<int, string>(1, IntellisenseWords[i]));
}
}
if(tempWords.Count < _suggestionCount && wordTyping.Length > 1)
{
for (int i = 0; i < IntellisenseWords.Length; i++)
{
if (IntellisenseWords[i].Contains(wordTyping, StringComparison.CurrentCultureIgnoreCase))
{
if(tempWords.Count(c => c.Value == IntellisenseWords[i]) == 0)
{
tempWords.Add(new KeyValuePair<int, string>(2, IntellisenseWords[i]));
}
}
}
}
outArray = tempWords.OrderBy(o => o.Key).Take(_suggestionCount).Select(s => s.Value).ToArray();
intelliAutoCompleteListBox.Items.AddRange(outArray);
return outArray.Length > 0;
}
private void ShowAutoCompleteForm()
{
Point tmpPoint = this.PointToClient(this.Location);
Point tmpSelPoint = this.GetPositionFromCharIndex(this.SelectionStart);
intelliAutoCompleteForm.Location = new Point((-1 * tmpPoint.X) + tmpSelPoint.X + this.XOffset, (-1 * tmpPoint.Y) + tmpSelPoint.Y + this.Margin.Top + this.YOffset);
intelliAutoCompleteForm.Show();
IsNotificationFormShowing = true;
this.Focus();
}
private void ReplaceCurrentWordWith(string Word)
{
string startString = "";
string endString = this.Text.Substring(this.SelectionStart);
string wordText = this.Text.Substring(0, this.SelectionStart);
int lastIndexOfSpace = wordText.LastIndexOf(' ');
int lastIndexOfNewline = wordText.LastIndexOf('\n');
int lastIndexOfTab = wordText.LastIndexOf('\t');
int lastIndexOf = Math.Max(Math.Max(lastIndexOfSpace, lastIndexOfNewline), lastIndexOfTab);
if (lastIndexOf >= 0)
{
startString = wordText.Substring(0, lastIndexOf + 1);
wordText = wordText.Substring(lastIndexOf + 1);
}
this.Text = String.Format("{0}{1} {2}", startString, Word, endString);
if(lastIndexOf >= 0)
{
this.SelectionStart = startString.Length + Word.Length + 1;
}
else
{
this.SelectionStart = Word.Length + 1;
}
IsFromReplaceTab = true;
}
}
I'm really new to programming. C# is the first class I've taken and I'm stuck on this a project. We had to create a program that will calculate the cost of workshop after selecting a workshop radiobutton and a location radio button. I've got everything working the way it's supposed to except for one thing.
Let's say you select a workshop, but you don't select a location. I have it to where a MessageBox will show up saying to "select a location," but how do I stop the program from calculating if this happens? As of now, it will just calculate and give the location amount 0. I need it to not calculate at all.
public partial class frmWorkshopSelector : Form
{
public frmWorkshopSelector()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close(); //When clicking the exit button, the program will close
}
private void btncalc_Click(object sender, EventArgs e)
{
int wsregistration = 0;
int lcost = 0;
const decimal DAYS = 3;
//For the following if statements, depending on what workshop and location is selected,
//their correstponding registration and lodging fees will be displayed
{
if (rbtHandlingStress.Checked == true)
{
wsregistration = 1000;
}
else if (rbtSupervisionSkills.Checked == true)
{
wsregistration = 1500;
}
else if (rbtTimeManagement.Checked == true)
{
wsregistration = 800;
}
else
MessageBox.Show("Please Select a Workshop");
lblTotalCost.Text = "";
lblLodgingCost.Text = "";
lblRegistrationCost.Text = "";
}
{
if (rbtAustin.Checked == true)
{
lcost = 150;
}
else if (rbtChicago.Checked == true)
{
lcost = 225;
}
else if (rbtDallas.Checked == true)
{
lcost = 175;
}
else
{
MessageBox.Show("Please Select a Location");
lblRegistrationCost.Text = " ";
lblTotalCost.Text = " ";
lblLodgingCost.Text = " ";
}
}
lblRegistrationCost.Text = wsregistration.ToString("C");
lblLodgingCost.Text = lcost.ToString("C");
lblTotalCost.Text = (wsregistration + (lcost * DAYS)).ToString("C");
}
private void btnReset_Click(object sender, EventArgs e)
{
//unchecks all radio buttons as well as clears out the previous calculations
lblRegistrationCost.Text = "";
lblLodgingCost.Text = "";
lblTotalCost.Text = "";
rbtHandlingStress.Checked = false;
rbtSupervisionSkills.Checked = false;
rbtTimeManagement.Checked = false;
rbtAustin.Checked = false;
rbtChicago.Checked = false;
rbtDallas.Checked = false;
}
}
You have to exit from the method. Added return statement in else block.
private void btncalc_Click(object sender, EventArgs e)
{
int wsregistration = 0;
int lcost = 0;
const decimal DAYS = 3;
//For the following if statements, depending on what workshop and location is selected,
//their correstponding registration and lodging fees will be displayed
if (rbtHandlingStress.Checked == true)
{
wsregistration = 1000;
}
else if (rbtSupervisionSkills.Checked == true)
{
wsregistration = 1500;
}
else if (rbtTimeManagement.Checked == true)
{
wsregistration = 800;
}
else
{
lblTotalCost.Text = "";
lblLodgingCost.Text = "";
lblRegistrationCost.Text = "";
MessageBox.Show("Please Select a Workshop");
return;
}
if (rbtAustin.Checked == true)
{
lcost = 150;
}
else if (rbtChicago.Checked == true)
{
lcost = 225;
}
else if (rbtDallas.Checked == true)
{
lcost = 175;
}
else
{
lblRegistrationCost.Text = " ";
lblTotalCost.Text = " ";
lblLodgingCost.Text = " ";
MessageBox.Show("Please Select a Location");
return;
}
lblRegistrationCost.Text = wsregistration.ToString("C");
lblLodgingCost.Text = lcost.ToString("C");
lblTotalCost.Text = (wsregistration + (lcost * DAYS)).ToString("C");
}
writing a "return" anywhere within the function exits that function, maybe after you show the message box to enter location, you type
return;
and this should do the job.
Just Add return statement in your code after showing the message box like below
public partial class frmWorkshopSelector : Form
{
public frmWorkshopSelector()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close(); //When clicking the exit button, the program will close
}
private void btncalc_Click(object sender, EventArgs e)
{
int wsregistration = 0;
int lcost = 0;
const decimal DAYS = 3;
//For the following if statements, depending on what workshop and location is selected,
//their correstponding registration and lodging fees will be displayed
{
if (rbtHandlingStress.Checked == true)
{
wsregistration = 1000;
}
else if (rbtSupervisionSkills.Checked == true)
{
wsregistration = 1500;
}
else if (rbtTimeManagement.Checked == true)
{
wsregistration = 800;
}
else
MessageBox.Show("Please Select a Workshop");
lblTotalCost.Text = "";
lblLodgingCost.Text = "";
lblRegistrationCost.Text = "";
return;
}
{
if (rbtAustin.Checked == true)
{
lcost = 150;
}
else if (rbtChicago.Checked == true)
{
lcost = 225;
}
else if (rbtDallas.Checked == true)
{
lcost = 175;
}
else
{
MessageBox.Show("Please Select a Location");
lblRegistrationCost.Text = " ";
lblTotalCost.Text = " ";
lblLodgingCost.Text = " ";
return;
}
}
lblRegistrationCost.Text = wsregistration.ToString("C");
lblLodgingCost.Text = lcost.ToString("C");
lblTotalCost.Text = (wsregistration + (lcost * DAYS)).ToString("C");
}
private void btnReset_Click(object sender, EventArgs e)
{ //uncheks all radio buttons as well as clears out the previous calculations
lblRegistrationCost.Text = "";
lblLodgingCost.Text = "";
lblTotalCost.Text = "";
rbtHandlingStress.Checked = false;
rbtSupervisionSkills.Checked = false;
rbtTimeManagement.Checked = false;
rbtAustin.Checked = false;
rbtChicago.Checked = false;
rbtDallas.Checked = false;
}
}
}
Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 6 years ago.
Improve this question
I have no clue what the problem is.
Here is my code:
namespace TimeClock
{
public partial class Form1 : Form
{
String Code;
String Name;
String InOut;
String allTextIn;
String allTextOut;
Boolean Joshua = false;
int JoshuaInt = 1;
Boolean Alec = false;
int AlecInt = 3;
Boolean Kyle = false;
int KyleInt = 5;
Boolean Jeffrey = false;
int JeffreyInt = 7;
Boolean Carl = false;
int CarlInt = 9;
Boolean Angela = false;
int AngelaInt = 11;
Boolean Kendra = false;
int KendraInt = 13;
Boolean Susan = false;
int SusanInt = 15;
Boolean Kory = false;
int KoryInt = 17;
Boolean Jeanine = false;
int JeanineInt = 19;
Boolean Daniel = false;
int DanielInt = 21;
Boolean Steven = false;
int StevenInt = 23;
Boolean Jacob = false;
int JacobInt = 25;
Boolean Mario = false;
int MarioInt = 27;
int Index;
String csvPath = "C:/Users/Public/TimeClockData.csv";
StringBuilder Header = new StringBuilder();
StringBuilder csvData = new StringBuilder();
private static SpeechSynthesizer synth = new SpeechSynthesizer();
Thread saveData;
Thread clock;
Thread location;
public Form1()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
TopMost = true;
Header.AppendLine("Timestamp, Name");
File.AppendAllText(csvPath, Header.ToString());
textBox1.Font = new Font("Arial", 30, FontStyle.Bold);
clock = new Thread(new ThreadStart(Clock));
clock.Start();
location = new Thread(new ThreadStart(GetPugsleyLocation));
location.Start();
}
private void Clock()
{
DateTime timeStamp = DateTime.Now;
textBox2.Text = timeStamp.ToString();
}
private void GetPugsleyLocation()
{
Ping ping = new Ping();
string ip = "";
IPAddress address = IPAddress.Parse(ip);
PingReply pong = ping.Send(address);
if (pong.Status == IPStatus.Success)
{
textBox3.Text = "Pugsley is here now";
}
else
{
textBox3.Text = "Pugsley is not here right now";
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
FormBorderStyle = FormBorderStyle.Sizable;
WindowState = FormWindowState.Normal;
TopMost = false;
}
}
public static void SpeakNow(string message)
{
synth.SelectVoiceByHints(VoiceGender.Male);
synth.Speak(message);
synth.Rate = -2;
}
public void saveDataThread()
{
DateTime timeStamp = DateTime.Now;
csvData.AppendLine(timeStamp + "," + Name + "," + InOut);
File.AppendAllText(csvPath, csvData.ToString());
csvData.Clear();
InOut = null;
}
private void Number_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
Code = Code + button.Text;
textBox1.Text = Code;
}
private void Enter_Click(object sender, EventArgs e)
{
//in or out
Button button = (Button)sender;
Name = "";
var list = new List<string>();
list.Add("107");
list.Add("104");
list.Add("115");
list.Add("131");
list.Add("113");
list.Add("112");
list.Add("126");
list.Add("117");
list.Add("130");
list.Add("116");
list.Add("108");
list.Add("133");
list.Add("122");
list.Add("106");
if (list.Contains(Code))
{
if (Code == "107")
{
Name = "Joshua";
Index = JoshuaInt;
if (Joshua == false)
{
InOut = "In";
Joshua = true;
goto done;
}
if (Joshua == true)
{
InOut = "Out";
Joshua = false;
goto done;
}
}
if (Code == "104")
{
Name = "Alec";
Index = AlecInt;
if (Alec == false)
{
InOut = "In";
Alec = true;
goto done;
}
if (Alec == true)
{
InOut = "Out";
Alec = false;
goto done;
}
}
if (Code == "115")
{
Name = "Kyle";
Index = KyleInt;
if (Kyle == false)
{
InOut = "In";
Kyle = true;
goto done;
}
if (Kyle == true)
{
InOut = "Out";
Kyle = false;
goto done;
}
}
if (Code == "131")
{
Name = "Jeffrey";
Index = JeffreyInt;
if (Jeffrey == false)
{
InOut = "In";
Jeffrey = true;
goto done;
}
if (Jeffrey == true)
{
InOut = "Out";
Jeffrey = false;
goto done;
}
}
if (Code == "113")
{
Name = "Carl";
Index = CarlInt;
if (Carl == false)
{
InOut = "In";
Carl = true;
goto done;
}
if (Carl == true)
{
InOut = "Out";
Carl = false;
goto done;
}
}
if (Code == "112")
{
Name = "Angela";
Index = AngelaInt;
if (Angela == false)
{
InOut = "In";
Angela = true;
goto done;
}
if (Angela == true)
{
InOut = "Out";
Angela = false;
goto done;
}
}
if (Code == "126")
{
Name = "Kendra";
Index = KendraInt;
if (Kendra == false)
{
InOut = "In";
Kendra = true;
goto done;
}
if (Kendra == true)
{
InOut = "Out";
Kendra = false;
goto done;
}
}
if (Code == "117")
{
Name = "Susan";
Index = SusanInt;
if (Susan == false)
{
InOut = "In";
Susan = true;
goto done;
}
if (Susan == true)
{
InOut = "Out";
Susan = false;
goto done;
}
}
if (Code == "130")
{
Name = "Kory";
Index = KoryInt;
if (Kory == false)
{
InOut = "In";
Kory = true;
goto done;
}
if (Kory == true)
{
InOut = "Out";
Kory = false;
goto done;
}
}
if (Code == "116")
{
Name = "Jeanine";
Index = JeanineInt;
if (Jeanine == false)
{
InOut = "In";
Jeanine = true;
goto done;
}
if (Jeanine == true)
{
InOut = "Out";
Jeanine = false;
goto done;
}
}
if (Code == "108")
{
Name = "Daniel";
Index = DanielInt;
if (Daniel == false)
{
InOut = "In";
Daniel = true;
goto done;
}
if (Daniel == true)
{
InOut = "Out";
Daniel = false;
goto done;
}
}
if (Code == "133")
{
Name = "Steven";
Index = StevenInt;
if (Steven == false)
{
InOut = "In";
Steven = true;
goto done;
}
if (Steven == true)
{
InOut = "Out";
Steven = false;
goto done;
}
}
if (Code == "122")
{
Name = "Jacob";
Index = JacobInt;
if (Jacob == false)
{
InOut = "In";
Jacob = true;
goto done;
}
if (Jacob == true)
{
InOut = "Out";
Jacob = false;
goto done;
}
}
if (Code == "106")
{
Name = "Mario";
Index = MarioInt;
if (Mario == false)
{
InOut = "In";
Mario = true;
goto done;
}
if (Mario == true)
{
InOut = "Out";
Mario = false;
goto done;
}
}
}
else
{
goto clear;
}
done:
InOut = button.Text;
saveData = new Thread(new ThreadStart(saveDataThread));
saveData.Start();
String[] textIn = System.IO.File.ReadAllLines(#"C:\Users\Public\textIn.txt");
String[] textOut = System.IO.File.ReadAllLines(#"C:\Users\Public\textOut.txt");
allTextIn = textIn[Index];
allTextOut = textOut[Index];
if (InOut == "In")
{
if (allTextIn != "/")
{
SpeakNow(allTextIn);
}
else
{
SpeakNow("Hello" + Name);
}
}
else
{
if (allTextOut != "/")
{
SpeakNow(allTextOut);
}
else
{
SpeakNow("Goodbye" + Name);
}
}
clear:
Code = null;
textBox1.Text = Code;
}
private void Backspace_Click(object sender, EventArgs e)
{
//Backspace
if (Code.Length >= 1)
{
Code = Code.Substring(0, Code.Length - 1);
textBox1.Text = Code;
}
}
private void Clear_Click(object sender, EventArgs e)
{
//Clear
Code = null;
textBox1.Text = Code;
}
}
}
It runs for a couple of seconds, then crashes. I am newish to C# and visual studio. Like I said, I have no clue what the problem is. I read that it might be caused by the threads changing the UI, but another version worked with the threads changing the UI, so I have no clue. Please help me!
You can't access the UI directly from your threads like you're doing.
Call Invoke on your controls first:
private void Clock()
{
textBox2.Invoke(new Action(() => textBox2.Text = DateTime.Now.ToString()));
}
private void GetPugsleyLocation()
{
...
...
textBox3.Invoke(new Action(() =>
textBox3.Text = "Pugsley is " + (pong.Status == IPStatus.Success ? "" : "not") + " here now"));
}
I am working with my C# Windows application, and this is my first time to use tdbgrid(component1). I want to prevent users from inputting duplicated values after validating them with the database.
Below is the code which I am using for it in (BeforeColUpdate)Event:
bool ExitValue = false;
private void C1TrueDBGrid_BeforeColUpdate(object sender, C1.Win.C1TrueDBGrid.BeforeColUpdateEventArgs e)
{
if (e.Column.Name == "Groups Code")
{
for (int currentRow = 0; currentRow < this.C1TrueDBGrid.Rows.Count - 1;currentRow++)
{
string rowToCompare = this.C1TrueDBGrid.Splits[0].DisplayColumns[C1TrueDBGrid.Col].DataColumn.CellValue(currentRow).ToString();
for (int otherRow = currentRow+1 ; otherRow < this.C1TrueDBGrid.Rows.Count; otherRow++)
{
bool DuplicatedRow = true;
string Row = this.C1TrueDBGrid.Splits[0].DisplayColumns[C1TrueDBGrid.Col].DataColumn.CellValue(otherRow).ToString();
if (Row!=rowToCompare)
{
ExitValue = false;
break;
}
if (DuplicatedRow)
{
C1TrueDBGrid.Splits[0].DisplayColumns[tgdGroupsUsers.Col].DataColumn.Value = DBNull.Value;
MessageBox.Show("Sorry: but this item(s) is already Exists ", "Error Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
ExitValue = true;
e.Cancel = true;
}
}
}
}
else
{
//Clear Fields
C1TrueDBGrid.Splits[0].DisplayColumns[C1TrueDBGrid.Col].DataColumn.Value = null;
e.Cancel = true;
}
}
if not duplicated below is the code which I am using in (AfterColUpdate)Event:
private void C1TrueDBGrid_AfterColUpdate(object sender, C1.Win.C1TrueDBGrid.ColEventArgs e)
{
if (!ExitValue)
{
int indexRow = this.C1TrueDBGrid.RowBookmark(this.C1TrueDBGrid.Row);
this.C1TrueDBGrid[indexRow, 0] = CSystemUsers.GroupsCode;
this.C1TrueDBGrid[indexRow, 0] = CSystemUsers.EngName;
}
}
componentone answer me the question:
private void c1TrueDBGrid1_BeforeColUpdate(object sender, C1.Win.C1TrueDBGrid.BeforeColUpdateEventArgs e)
{
if (e.ColIndex == 1)
{
for (int i = 0; i < c1TrueDBGrid1.RowCount; i++)
{
if (c1TrueDBGrid1.Editor.Text == c1TrueDBGrid1[i, e.ColIndex].ToString())
{
MessageBox.Show("Sorry: but this item(s) already Exists", "Error Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
e.Cancel = true;
}
}
}
}
link:
http://our.componentone.com/groups/topic/how-do-i-prevent-duplicate-entries-in-c1truedbgrid/
hope this helps someone else in future: