I'm trying to get this to throw an exception if year entered in TextBoxCopyrightYear.Text is higher than the current year, but it does not seem to be doing it.
The question is... why is it not throwing the exception when I input something higher than 2011?
I created custom exception class CopyrightYearOutOfRange:
public class CopyrightYearOutOfRange : Exception
{
private LibraryBook book;
private int year;
public CopyrightYearOutOfRange(LibraryBook book, int year)
: base("Year is beyond current year. This is impossible.")
{
this.book = book;
this.year = year;
}
public LibraryBook Book { get { return book; } }
public int Year { get { return year; } }
public CopyrightYearOutOfRange(string message)
: base(message)
{
}
}
And it is thrown in this section in my LibraryBook class as this:
public LibraryBook(string title, string author, int copyrightYear)
{
Title = title;
Author = author;
if (isValidYear(copyrightYear))
{
CopyrightYear = copyrightYear;
}
else
{
throw new CopyrightYearOutOfRange(this, copyrightYear);
}
}
private bool isValidYear(int year)
{
return year <= 2011;
}
So I created this code to check if the user input is valid...
// makes sure data is valid...
private bool validateData()
{
int year;
int errorCount = 0;
string errorHeader = "";
string errorMessage = "";
string errorTitle = "";
string plural = "";
if (textBoxTitle.Text.Length == 0)
{
errorMessage += "\nEnter a title";
errorCount++;
}
if (!int.TryParse(textBoxCopyrightYear.Text, out year) || year < 1)
{
errorMessage += "\nEnter year as a positive number";
errorCount++;
}
else
{
try
{
// Is this where I'm making a mistake?
int.TryParse(textBoxCopyrightYear.Text, out year);
}
catch (CopyrightYearOutOfRange ex)
{
MessageBox.Show(
string.Format("{0}", ex.Message)
, "Copyright out of range exception"
, MessageBoxButtons.OK
, MessageBoxIcon.Exclamation
);
}
}
and here is the ok button code:
private void buttonOK_Click(object sender, EventArgs e)
{
if (validateData())
{
controlsToObject();
this.DialogResult = DialogResult.OK;
}
}
edit: Here is the code that creates the object. Is this where I am supposed to put the try catch block?
private void controlsToObject()
{
if (libraryBook == null)
{
libraryBook = new LibraryBook();
}
libraryBook.Title = textBoxTitle.Text;
libraryBook.Author = textBoxAuthor.Text;
libraryBook.CopyrightYear = int.Parse(textBoxCopyrightYear.Text);
}
AGAIN: The question is... why is it not throwing the exception when I input something higher than 2011?