テキスト ボックスと、 Focus / Leave イベントTB
のハンドラーがあります。EH
また、BT
クリックするとプログラムを終了するボタンがあり、dispose(); のみです。適切なデータを入れずにボックスを離れるTB
と、データをチェックするために focus leave イベント ハンドラーがトリガーされ、警告が表示され、フォーカスが に戻りますTB
。
TB
しかし、フォーカスを持ってクリックしているときにプログラムを終了したい場合BT
、再びEH
トリガーされてフォーカスが戻りTB
、プログラムは終了しません。
どうすればこの問題を解決できますか? コードは次のとおりです。
public Form1()
{
InitializeComponent();
}
private void EH(object sender, EventArgs e) // event handler EH
{
double temp;
if (TB.Text == "")
{
MessageBox.Show("Must enter a valid distance for d1!\r\n" +
"The valid range is ( 10,32 )",
"Wake up!", MessageBoxButtons.OK, MessageBoxIcon.Error);
TB.Focus();
return;
}
else
try
{
temp = Convert.ToDouble(TB.Text);
if (temp < 10 || temp > 32)
{
MessageBox.Show("Invalid distance for d1!\r\n" +
"The valid range is ( 10,32 )",
"Again! Wake up!", MessageBoxButtons.OK, MessageBoxIcon.Error);
TB.Text = "";
TB.Focus();
return;
}
minh1 = 1 / 8 * temp; // sets minimum h1
if (minh1 < 10)
minh1 = 10;
}
catch (Exception) // can't convert
{
MessageBox.Show("Invalid numeric entry!\r\n" +
"Please enter a valid number!",
"Hey! Wake up!", MessageBoxButtons.OK, MessageBoxIcon.Error);
TB.Text = "";
TB.Focus();
}
}
private void TB_TextChanged(object sender, EventArgs e) // change text in TB
{
if (TB.Text == "")
btgo.Enabled = false;
else
btgo.Enabled = true;
}
private void btgo_Click(object sender, EventArgs e) // Execute!
{
say.Text = "Minimum height h1 has been calculated to be " +
string.Format("{0:#0.00}", minh1) + " Fts";
BT.Focus();
}
private void BT_Click(object sender, EventArgs e) // --- PROGRAM END ---
{
Dispose();
}