Part validation complete

This commit is contained in:
Chris Bell 2025-05-15 12:01:30 -05:00
parent 70400de418
commit 4de28ea29c
4 changed files with 256 additions and 4 deletions

View File

@ -28,6 +28,7 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
components = new System.ComponentModel.Container();
screenLabel = new Label(); screenLabel = new Label();
inHouseRadioButton = new RadioButton(); inHouseRadioButton = new RadioButton();
outsourcedRadioButton = new RadioButton(); outsourcedRadioButton = new RadioButton();
@ -47,6 +48,8 @@
minTextBox = new TextBox(); minTextBox = new TextBox();
saveButton = new Button(); saveButton = new Button();
cancelButton = new Button(); cancelButton = new Button();
errorProvider1 = new ErrorProvider(components);
((System.ComponentModel.ISupportInitialize)errorProvider1).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// screenLabel // screenLabel
@ -115,6 +118,7 @@
nameTextBox.Name = "nameTextBox"; nameTextBox.Name = "nameTextBox";
nameTextBox.Size = new Size(153, 23); nameTextBox.Size = new Size(153, 23);
nameTextBox.TabIndex = 4; nameTextBox.TabIndex = 4;
nameTextBox.Validating += nameTextBox_Validating;
// //
// inventoryLabel // inventoryLabel
// //
@ -131,6 +135,7 @@
inventoryTextBox.Name = "inventoryTextBox"; inventoryTextBox.Name = "inventoryTextBox";
inventoryTextBox.Size = new Size(153, 23); inventoryTextBox.Size = new Size(153, 23);
inventoryTextBox.TabIndex = 6; inventoryTextBox.TabIndex = 6;
inventoryTextBox.Validating += inventoryTextBox_Validating;
// //
// priceCostLabel // priceCostLabel
// //
@ -147,6 +152,7 @@
priceCostTextBox.Name = "priceCostTextBox"; priceCostTextBox.Name = "priceCostTextBox";
priceCostTextBox.Size = new Size(153, 23); priceCostTextBox.Size = new Size(153, 23);
priceCostTextBox.TabIndex = 8; priceCostTextBox.TabIndex = 8;
priceCostTextBox.Validating += priceCostTextBox_Validating;
// //
// machineCompanyLabel // machineCompanyLabel
// //
@ -163,6 +169,7 @@
machineCompanyTextBox.Name = "machineCompanyTextBox"; machineCompanyTextBox.Name = "machineCompanyTextBox";
machineCompanyTextBox.Size = new Size(153, 23); machineCompanyTextBox.Size = new Size(153, 23);
machineCompanyTextBox.TabIndex = 10; machineCompanyTextBox.TabIndex = 10;
machineCompanyTextBox.Validating += machineCompanyTextBox_Validating;
// //
// label6 // label6
// //
@ -179,6 +186,7 @@
maxTextBox.Name = "maxTextBox"; maxTextBox.Name = "maxTextBox";
maxTextBox.Size = new Size(69, 23); maxTextBox.Size = new Size(69, 23);
maxTextBox.TabIndex = 12; maxTextBox.TabIndex = 12;
maxTextBox.Validating += maxTextBox_Validating;
// //
// label7 // label7
// //
@ -195,6 +203,7 @@
minTextBox.Name = "minTextBox"; minTextBox.Name = "minTextBox";
minTextBox.Size = new Size(69, 23); minTextBox.Size = new Size(69, 23);
minTextBox.TabIndex = 14; minTextBox.TabIndex = 14;
minTextBox.Validating += minTextBox_Validating;
// //
// saveButton // saveButton
// //
@ -216,6 +225,10 @@
cancelButton.UseVisualStyleBackColor = true; cancelButton.UseVisualStyleBackColor = true;
cancelButton.Click += cancelButton_Click; cancelButton.Click += cancelButton_Click;
// //
// errorProvider1
//
errorProvider1.ContainerControl = this;
//
// AddModifyPartScreen // AddModifyPartScreen
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
@ -244,6 +257,7 @@
MinimumSize = new Size(609, 440); MinimumSize = new Size(609, 440);
Name = "AddModifyPartScreen"; Name = "AddModifyPartScreen";
Text = "Part"; Text = "Part";
((System.ComponentModel.ISupportInitialize)errorProvider1).EndInit();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@ -269,5 +283,6 @@
private TextBox minTextBox; private TextBox minTextBox;
private Button saveButton; private Button saveButton;
private Button cancelButton; private Button cancelButton;
private ErrorProvider errorProvider1;
} }
} }

View File

@ -17,6 +17,16 @@ namespace C968Project.Views
private Part? _selectedPart = null; private Part? _selectedPart = null;
private Mode _mode = Mode.INHOUSE; private Mode _mode = Mode.INHOUSE;
private bool _isNameValid = false;
private bool _isInventoryValid = false;
private bool _isPriceValid = false;
private bool _isMaxValid = false;
private bool _isMinValid = false;
private bool _isMachineOrCompanyValid = false;
private int _validatedMin = 0;
private int _validatedMax = 0;
public AddModifyPartScreen(ScreenOption screenOption, Part? part = null) public AddModifyPartScreen(ScreenOption screenOption, Part? part = null)
{ {
InitializeComponent(); InitializeComponent();
@ -28,11 +38,15 @@ namespace C968Project.Views
{ {
screenLabel.Text = "Add Part"; screenLabel.Text = "Add Part";
ChangeMode(Mode.INHOUSE); ChangeMode(Mode.INHOUSE);
ValidateInputs();
} }
else if (screenOption == ScreenOption.MODIFY) else if (screenOption == ScreenOption.MODIFY)
{ {
screenLabel.Text = "Modify Part"; screenLabel.Text = "Modify Part";
PopulatePartData(_selectedPart); PopulatePartData(_selectedPart);
inHouseRadioButton.Enabled = false;
outsourcedRadioButton.Enabled = false;
ValidateInputs();
} }
} }
@ -122,15 +136,21 @@ namespace C968Project.Views
{ {
if (_screenOption is ScreenOption.ADD) if (_screenOption is ScreenOption.ADD)
{ {
AddPart(); if (ValidateInputs())
{
AddPart();
Close();
}
} }
if (_screenOption is ScreenOption.MODIFY) if (_screenOption is ScreenOption.MODIFY)
{ {
ModifyPart(); if (ValidateInputs())
{
ModifyPart();
Close();
}
} }
Close();
} }
private void cancelButton_Click(object sender, EventArgs e) private void cancelButton_Click(object sender, EventArgs e)
@ -163,6 +183,8 @@ namespace C968Project.Views
outsourcedRadioButton.Checked = true; outsourcedRadioButton.Checked = true;
machineCompanyLabel.Text = "Company Name"; machineCompanyLabel.Text = "Company Name";
} }
ValidateMachineOrCompany();
} }
enum Mode enum Mode
@ -170,5 +192,216 @@ namespace C968Project.Views
INHOUSE, INHOUSE,
OUTSOURCED OUTSOURCED
} }
private bool ValidateInputs()
{
ValidateName();
ValidateInventory();
ValidatePrice();
ValidateMax();
ValidateMin();
ValidateMachineOrCompany();
return _isNameValid && _isInventoryValid && _isPriceValid && _isMaxValid && _isMinValid && _isMachineOrCompanyValid;
}
private void SetTextBoxValidationState(TextBox textBox, bool isValid)
{
if (isValid)
{
textBox.BackColor = Color.White;
}
else
{
textBox.BackColor = Color.Red;
}
}
private void ValidateName()
{
if (nameTextBox.Text == string.Empty)
{
errorProvider1.SetError(nameTextBox, "Please enter a part name");
_isNameValid = false;
}
else
{
errorProvider1.SetError(nameTextBox, "");
_isNameValid = true;
}
SetTextBoxValidationState(nameTextBox, _isNameValid);
}
private void nameTextBox_Validating(object sender, CancelEventArgs e)
{
ValidateName();
}
private void ValidateInventory()
{
int inventory = 0;
if (inventoryTextBox.Text != string.Empty && int.TryParse(inventoryTextBox.Text, out inventory))
{
if (_isMinValid && _isMaxValid)
{
if (inventory > _validatedMax)
{
errorProvider1.SetError(inventoryTextBox, $"Must be less than Max: {_validatedMax}");
_isInventoryValid = false;
}
else if (inventory < _validatedMin)
{
errorProvider1.SetError(inventoryTextBox, $"Must be greater than Min: {_validatedMin}");
_isInventoryValid = false;
}
else
{
errorProvider1.SetError(inventoryTextBox, "");
_isInventoryValid = true;
}
}
else
{
errorProvider1.SetError(inventoryTextBox, $"Min and Max values must be set");
_isInventoryValid = false;
}
}
else
{
_isInventoryValid = false;
errorProvider1.SetError(inventoryTextBox, "Field must contain an integer value");
}
SetTextBoxValidationState(inventoryTextBox, _isInventoryValid);
}
private void inventoryTextBox_Validating(object sender, CancelEventArgs e)
{
ValidateInventory();
}
private void ValidatePrice()
{
float price = 0f;
if (priceCostTextBox.Text != string.Empty && float.TryParse(priceCostTextBox.Text, out price))
{
_isPriceValid = true;
errorProvider1.SetError(priceCostTextBox, "");
}
else
{
_isPriceValid = false;
errorProvider1.SetError(priceCostTextBox, "Field must contain a floating point number");
}
SetTextBoxValidationState(priceCostTextBox, _isPriceValid);
}
private void priceCostTextBox_Validating(object sender, CancelEventArgs e)
{
ValidatePrice();
}
private void ValidateMax()
{
int max = 0;
if (maxTextBox.Text != string.Empty && int.TryParse(maxTextBox.Text, out max))
{
_isMaxValid = true;
errorProvider1.SetError(maxTextBox, "");
_validatedMax = max;
}
else
{
_isMaxValid = false;
errorProvider1.SetError(maxTextBox, "Field must contain an integer value");
}
ValidateInventory();
SetTextBoxValidationState(maxTextBox, _isMaxValid);
}
private void maxTextBox_Validating(object sender, CancelEventArgs e)
{
ValidateMax();
}
private void ValidateMin()
{
int min = 0;
if (minTextBox.Text != string.Empty && int.TryParse(minTextBox.Text, out min))
{
_isMinValid = true;
errorProvider1.SetError(minTextBox, "");
_validatedMin = min;
}
else
{
_isMinValid = false;
errorProvider1.SetError(minTextBox, "Field must contain an integer value");
}
ValidateInventory();
SetTextBoxValidationState(minTextBox, _isMinValid);
}
private void minTextBox_Validating(object sender, CancelEventArgs e)
{
ValidateMin();
}
private void ValidateMachineOrCompany()
{
if (machineCompanyTextBox.Text == string.Empty)
{
_isMachineOrCompanyValid = false;
if (_mode is Mode.INHOUSE)
{
errorProvider1.SetError(machineCompanyTextBox, "Field must contain an integer value");
}
if (_mode is Mode.OUTSOURCED)
{
errorProvider1.SetError(machineCompanyTextBox, "Field must contain a value");
}
}
else
{
if (_mode is Mode.INHOUSE)
{
int machineId = 0;
if (int.TryParse(machineCompanyTextBox.Text, out machineId))
{
_isMachineOrCompanyValid = true;
errorProvider1.SetError(machineCompanyTextBox, "");
}
else
{
_isMachineOrCompanyValid = false;
errorProvider1.SetError(machineCompanyTextBox, "Field must contain an integer value");
}
}
if (_mode is Mode.OUTSOURCED)
{
if (machineCompanyTextBox.Text != string.Empty)
{
_isMachineOrCompanyValid = true;
errorProvider1.SetError(machineCompanyTextBox, "");
}
}
}
SetTextBoxValidationState(machineCompanyTextBox, _isMachineOrCompanyValid);
}
private void machineCompanyTextBox_Validating(object sender, CancelEventArgs e)
{
ValidateMachineOrCompany();
}
} }
} }

View File

@ -117,6 +117,9 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="errorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>

View File

@ -24,6 +24,7 @@ public partial class MainScreen : Form
private void partsModifyButton_Click(object sender, EventArgs e) private void partsModifyButton_Click(object sender, EventArgs e)
{ {
if (partsDataGridView.CurrentCell is null) return;
Part part = Program.Inventory.LookupPart(partsDataGridView.CurrentCell.RowIndex); Part part = Program.Inventory.LookupPart(partsDataGridView.CurrentCell.RowIndex);
if (part is null) return; if (part is null) return;
AddModifyPartScreen partScreen = new AddModifyPartScreen(ScreenOption.MODIFY, part); AddModifyPartScreen partScreen = new AddModifyPartScreen(ScreenOption.MODIFY, part);