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
);
}
}
ここにOKボタンのコードがあります:
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 年よりも高い値を入力したときに例外がスローされないのはなぜですか?