1

テキスト ボックスでのユーザー入力の検証にこのカスタム メソッドを使用しようとしています。しかし、フォームの次のテキスト ボックスに移動 (フォーカス) できないため、ここに何かが欠けています。

private void textBox_Validating(object sender, CancelEventArgs e)
{
    TextBox currenttb = (TextBox)sender;
    if (currenttb.Text == "")
    {
        MessageBox.Show(string.Format("Empty field {0 }", currenttb.Name.Substring(3)));
        e.Cancel = false;
    }

    else
    {
        e.Cancel = true;
    }
}

フォーム コンストラクターで foreach ループを使用してハンドラーをテキスト ボックスに追加します。

foreach(TextBox tb in this.Controls.OfType<TextBox>().Where(x => x.CausesValidation == true))
{
    tb.Validating += textBox_Validating;
}
4

1 に答える 1

1

ここで答えたように、フォーカスを失うという予想される動作C# winformsのテキストボックスの入力を検証します:-

説明

TextBox を検証するには、さまざまな方法があります。後で、または検証イベントで、すべてのキーストロークでこれを行うことができます。

Validating Event は、TextBox がフォーカスを失った場合 (たとえば、他のコントロールをクリックした場合) に発生します。セット e.Cancel = true の場合、TextBox はフォーカスを失いません。

MSDN - Control.Validating イベント キーボード (TAB、SHIFT + TAB など) を使用するか、Select メソッドまたは SelectNextControl メソッドを呼び出すか、ContainerControl.ActiveControl プロパティを現在のフォームに設定することによってフォーカスを変更すると、フォーカス イベントが発生します。以下の順番で発生

入る

フォーカスを得た

離れる

検証中

検証済み

ロストフォーカス

マウスを使用するか、Focus メソッドを呼び出してフォーカスを変更すると、次の順序でフォーカス イベントが発生します。

入る

フォーカスを得た

ロストフォーカス

離れる

検証中

検証済み

于 2014-06-19T09:02:38.943 に答える