Я пытаюсь заставить это выдать исключение, если год введен в TextBoxCopyrightYear.Text выше текущего года, но, похоже, он этого не делает.
Вопрос в том ... почему не выдается исключение, когда я ввожу что-то выше, чем 2011?
Я создал пользовательский класс исключений 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)
{
}
}
И он добавлен в этот раздел в моем классе LibraryBook, как это:
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;
}
Итак, я создал этот код для проверки правильности ввода пользователя ...
// 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
);
}
}
и вот код кнопки ОК:
private void buttonOK_Click(object sender, EventArgs e)
{
if (validateData())
{
controlsToObject();
this.DialogResult = DialogResult.OK;
}
}
редактирование:
Вот код, который создает объект. Это где я должен поставить блок try catch?
private void controlsToObject()
{
if (libraryBook == null)
{
libraryBook = new LibraryBook();
}
libraryBook.Title = textBoxTitle.Text;
libraryBook.Author = textBoxAuthor.Text;
libraryBook.CopyrightYear = int.Parse(textBoxCopyrightYear.Text);
}
РАЗ:
Вопрос в том ... почему не выдается исключение, когда я ввожу что-то выше, чем 2011?