【解決方法】キャンセルボタンがクリックされた場合に、Leave イベントを無視する方法は?


Visual Studio フォームのテキスト ボックス コントロールからの次の単純な Leave イベントについて考えてみましょう。

C#
private void dscr_Leave(object sender, EventArgs e)
{
    if (dscr.Text == null)
        MessageBox.Show("You must supply a description");
}

画面に「キャンセル」ボタンがあり、フォーカスが「dscr」テキスト ボックスにあり、空白であるとします。 キャンセルボタンをクリックします。 初心者として、キャンセル ボタンがクリックされたときにこの leave イベントを無視する方法に苦労しています。
私はかなり長い間検索してきましたが、これを達成する方法が見つかりません。 leave イベントはクリックの前に発生しますが、クリック イベントが来ることを知る方法が必要であり、不必要な検証を避ける必要があります。

この状況を処理する方法の例を誰かに教えてもらえますか、またはこれを達成する方法について教えてもらえますか?

解決策 1

個人的に私はあなたの移動します

C#
if (dscr.Text == null)
            MessageBox.Show("You must supply a description");

次のステップ ボタン (保存または更新ボタンなど) に入力します。

解決策 2

Simon_Whale は絶対に正しいです。 このようなチェックを編集ボタンに直接配置することは決して良い考えではありません。エラーが発生せずにフォームを正常に閉じることさえできなかったからです。 ユーザーは不必要に閉じ込められます。

また、[次へ]をクリックするまでユーザーにある程度の自由を与えると、よりユーザー フレンドリーになります。 また、各入力コントロールの各 Leave イベントを個別に行うのではなく、CheckFormInput() のような単一の関数でチェックを行う方が適切です。

幸運を!

解決策 4

別のハックな方法は、canbutton に 2 つのイベントを追加することです。

1. パブリック変数 IsCancelling = true を設定する canbutton_MouseEnter

2. パブリック変数 IsCancelling = false を設定する canbutton_MouseLeave

次に、チェックに含めます。

if (dscr.Text == null && !IsCancelling)

コメント

タイトルとURLをコピーしました